implement request caching

This is a preliminary implementation, meaning that it is still not
heavily tested. One current drawback, for example, is that routes using
caching via this implementation must preserve the exact array that's
returned by the fetch call all the way through the Ember stack to what's
rendered.
fix tests and run loop

Until noticeably necessary otherwise, do not put #ajax promise handling
in the Ember run loop.
Merge pull request #2 from jclem/request-caching

implement request caching