Made the datasource injectable.

Allows different data source implementations, including mocking out
completely.
Refactored caching from transport.