Add new managed resources implementation

A new ManagedStorage interface allows blobs to be stored in a mongo database. The blobs are initially namespaced to an environment but apis will be added to the interface to allow data to be stored globally or against a given user.

Data is de-duped when Put - if there is already a blob with the same checksums (md5/sha256) it is not stored twice; a reference to the original data is used.
Relying on `&err` here makes me nervous. It's would be very easy to introduce another statement above this that shadows the named result.

There's a test that ensures the the right thing is done and the blob is removed, but I imagine it could be difficult to figure out why that test is failing. I think it'd be prudent to rename the result to something other than `err`.