Fuzz tests

Noblits internals are tested thoroughly through fuzz testing. Noblit uses structure-aware fuzzing to generate sequences of calls to internal APIs, after which all invariants are checked. See the code in the fuzz directory.

TODO: Expand these docs.

TODO: Add more traditional fuzzer, for the parser of the binary query format.

TODO: Add a structure-aware fuzzer for the higher-level API, in addition to those that focus on internals. Maybe just against the C interface.

TODO: Add an abstraction for IO, and an implementation that that can inject errors based on the fuzz input.