Transition from client IDs to record references

In Ember Data, there needs to be a mechanism for the system to refer to
a record that has not yet been loaded. These references need to be as
cheap as possible so that loading and processing data does not require
materializing many full-blown DS.Models all at once.

Previously, the mechanism for referencing unloaded/unmaterialized records
was the client ID, a monotonically increasing number. Metadata about the
unmaterialized record was saved in several different data structures in
the store, indexed by client ID.

Unfortunately, as the needs of Ember Data have grown, the number of data
structures in the store have increased beyond their initial scope, leading
to confusing, opaque code.

This commit replaces almost all of the uses of client ID with the notion
of a record reference. A reference is a simple JavaScript object that
contains all of the metadata for a single record.

For example, when you load data into the store via `load`, it will
be saved inside the record reference. When you find the record, via
e.g. `App.Post.find(1)`, the materialized record will also be
saved inside the record reference.

This commit also comes with several convenience methods for dealing with
record references on the store.