odb: move hashing to the frontend for streaming

Currently the streaming and direct writes hash differently. In the former, the odb backend calculates what the object's id should be; in the latter, the odb backend is told what the object's ID is.

Unify the logic by moving the hashing to the stream's frontend, and telling the backend what the object's ID is.