Ability to forcefully reload cached resources

Any call to .get() that includes a reload flag will always fire off the
corresponding HTTP request and return the stored resource. When the HTTP
request is completed, the stored resource is updated with the response
body.

If the resource was already stored, the only effect is to asynchronously
set the resource's data, so no initializer function will be reapplied to
the resource, and the $promise will not change.
Ability to sync a collection with another collection

The sync is one way, so the collection that is passed as an argument is
not changed. The collection doing the sync is modified in the following
ways:

Given `<target>.sync(<argument>)`

* All resources in the argument collection that are not found in the
  target collection are added to the original
* All resources in the target collection that are not found in the
  argument collection are removed from the target
* All resources in the target collection that are also found in the
  argument collection are .$extend()ed with the corresponding argument
  collection's resource
Ability to forcefully reload cached collections

Any call to .query() that includes a reload flag will always fire off
the corresponding HTTP request and return the stored collection. When
the HTTP request is completed, the stored collection is updated with the
response body.

If the collection was already stored, then any resources not in the http
response are removed from the collection. Any existing resources in the
http response are updated (via .$extend()) in the collection/cache. Any
resources in the http response that were not already in the
collection/cache are initialized with the given config.intializer and
added to the collection.