Introduce state/toolstorage

state/toolstorage provides an interface, Storage,
for storing tools tarballs and metadata in state.
The tarballs are stored in GridFS, while the
metadata are stored in a Mongo collection.

State grows a single new method, ToolsStorage,
which constructs a toolstorage.StorageCloser.
The returned object will store tools metadata in
the "juju" database's "toolsmetadata" collection,
and the tarballs in the "blobstore" database.
This makes things pretty clumsy, since the ToolStorage method needs a session. I'm using the result there; what to do if it's nil? I'd rather keep this as it is. If you disagree, I'll fix it up in a followup.