Create a base CachedDataProvider that reuses lots of the plumbing code from OrionDataProvider.  Using this class makes it much easier to create a caching data provider than starting from scratch.