ObjectDatabase: we should fail when asked to read too much

ObjectDatabase.CreateBlob() accepts a number of bytes to read. It
currently however treats this as a max, rather than a hard size, which
seems ripe for introducing bugs.

Assert that we should throw when asked to read too much from a Stream.
ObjectDatabase: stream objects when we know we can

When given a size and no path, we know that we do not need to buffer the
content or apply any filters, so we can create an write-stream into the
object database and put in our content directly, avoiding the temporary
file and callbacks altogether.