Currently, getStreamedBitcodeModule takes a DataStreamer and then
creates a StreamingMemoryObject from that DataStreamer for the BitcodeReader.
That allows flexibility in the supplied DataStreamer implementation but does
not allow flexibility in the StreamingMemoryObject implementation.
For example, the StreamingMemoryObject might want the flexibilty of caching bytes
in a thread-local way.
Make StreamingMemoryObject the interface instead so that both DataStreamer
and StreamingMemoryObject implementations can be customized.