Break apart materialize
Update tests to use adapter's toJSON method
Change semantics for reporting unloaded attributes

Previously, if a record was not yet loaded,
retrieving an attribute would return null. Now,
undefined is returned instead.
Continue firming up the adapter<=>record API
Encapsulate serialization and deserialization

Previously, concerns about how key names
for given hashes returned from the server were
spread across several different objects.

Now, the serialization and materialization
(converting an opaque data hash returned from
the server into meaningful results for Ember Data)
are handled by the DS.Serializer object.

Instead of jamming this responsibility into the
adapter, like so many clowns in a clown car, the
adapter is now solely responsible for deciding
which records should be committed, loading
records, and notifying the store of changes in
to record state.
Move `adapter.js` to `system` directory
Move serialization test to `integration` directory
Extract materialization tests and add some more
Only extract IDs from hashes if none exists
Materialized attributes should be transformed
Add materializeAttribute convenience
Remove toJSON code from DS.Model
Add attributes transformations to serializer
Added mapping for attributes and associations
Add an assert for setting `id` as an attribute
Add primaryKey mapping
Get tests passing
Extract query, find and association tests
Add `didLoad` event to AdapterPopulatedRecordArray
Split find and findAll tests

This commit also adds an invokeAsync helper
for invoking a callback after a specified
interval, while not screwing up QUnit tests.