On-Demand hasMany Relationships.

With this commit, hasMany relationships can be resolved on-demand without
the need for ids upfront. For example:

	App.Person = DS.Model.extend({
		name: DS.attr('string'),
		posts: DS.hasMany(App.Post)
	});

	App.Post = DS.Model.extend({
		person: DS.belongsTo(App.Person),
		message: DS.attr('string')
	});

	var person = store.find(App.Person, 1);

When find is called for a Person with an id of 1 the server can return a
data hash similar to the following:

	{
		person: {
			id: 1,
			name: 'John Doe'
		}
	}

Notice that the 'posts' hasMany relationship is left 'undefined' in the hash
returned by the server. The 'undefined' relationship can then be resolved
on-demand at a later time:

	var posts  = person.get('posts');

The adapter's findHasMany method is provided the parent record (person)
and the hasMany relationship key (posts). The server can then be queried using
the the parent record type (Person), parent record id (1) and relationship
key (posts) to resolve the hasMany relationship and return the related records:

	{
		posts: [
			{
				id: 1,
				user_id: 1,
				message: 'Some message...'
			},
			{
				id: 2,
				user_id: 1,
				message: 'Another message...'
			}
		]
	}

We found it useful to override Adapter.dirtyRecordsForAttributeChange,
Adapter.dirtyRecordsForHasManyChange and extend DS.JSONSerializer to handle
the slightly different payload correctly (i.e. hasMany starts out undefined
and when it is resolved that doesn't necessarily mean a change has occurred).