Added support for polymorphic associations.

```js
App.User = DS.Model.extend({
 messages: DS.hasMany(App.Message, {polymorphic: true})
});

App.Message = DS.Model.extend({
  created_at: DS.attr('date'),
  user: DS.belongsTo(App.User)
});

App.Post = App.Message.extend({
  title: DS.attr('string')
});

App.Comment = App.Message.extend({
  body: DS.attr('string'),
  message: DS.belongsTo(App.Message, {polymorphic: true})
});
```

You need to configure the serializer to map to the correct type:

```js
DS.RESTAdapter.configure('App.Post' {
  alias: 'post'
});
DS.RESTAdapter.configure('App.Comment' {
  alias: 'comment'
});
```

The expected payload for a polymorphic association with the REST adapter/serializer should contain the type:

```
{
    user: {
        id: 3,
        // For a polymorphic hasMany
        messages: [
            {id: 1, type:"post"},
            {id:1, type: "comment"}
        ]
    },

    comment: {
        id: 1,
        // For a polymorphic belongsTo
        message_id: 1,
        message_type: "post"
    }
}
```

Initializing an alias will automatically allow you to sideload this
type. The support for `sideloadAs` is only for backward compatibility.


Two hooks exist for the serialization and materialization of an embedded
polymorphic association:
* `addType` that adds the record's type to the serialized data
* `extractEmbeddedType` that retrieves the record's type from the
payload.

Both hooks rely in the JSONSerializer on `keyForEmbeddedType`, which returns the string used to
represent the record's type in the payload. The default value is `'type'`