Store tools in GridFS, metadata in state

When bootstrapping, tools will be stored in GridFS.
If the tools were uploaded, they will be "exploded"
into each of the series of the same OS. Otherwise,
only the specific binary version that was downloaded
from the external tools source.

When a user searches for tools (FindTools API), then
the API server will search both in state/gridfs and
in external simplestreams sources. If an exact match
is specified and it is found in state/gridfs, then
the simplestreams search will be excluded.

When a user requests a tools tarball, then the API
server will first attempt to retrieve them from gridfs.
If the tools are not available in gridfs, then the
API server will search simplestreams, download the
tools, and cache them in gridfs before returning them
to the user.
This means all error messages sent up to the CLI change, which I'd like to avoid in this PR at least.