Advanced errors handling

This PR adds a few error classes to ember-data and a way to manage them.

`DS.Error`
`DS.AdapterError`

`DS.ValidationError`
`DS.AdapterValidationError`

At some point we will probably want a `DS.ClientValidationError` (probably not the right name)

`DS.ValidationError` is an enumerable that exposes also per attribute errors.

````
{{#each errors}}
  {{this}}
{{/each}}

{{#each errors.firstName}}
  {{this}}
{{/each}}
````

A record have an `error` property, and in case of validation errors, `error` is aliased to `errors`.
`DS.ValidationError` is responsable to manage record state based on presence absence of attribute error messages on it.

````
record.get('errors').add('firstName', 'is invalid');
record.get('errors').add('lastName', 'is invalid');
record.get('isValid') //=> false
record.get('errors').remove('lastName');
record.get('isValid') //=> false
record.get('errors').clear();
record.get('isValid') //=> true
````