Better handling of http requests

This is part 1/2 of error handling. (split of #958)

In this PR I mostly unified the way we handle success/error for different adapter operations. I added a few hooks so a developer can customize how he interpret network/adapter errors. The only thing coming out of adapter is a promise that resolves or rejects with an error. I changed `DS.Error` to inherit from simple JS `Error` like we do it in ember core. Maybe we could inherit from `Ember.Error`? But anyways following @tomdale comment, errors are simple js object/errors now.

I think some part of it could be extracted in to core like `ember-http` and Error inheritance.