Store Managed Adapters & Serializers

Pull request to make a store instance responsible for it's own adapter and serializer instances - as suggested fix to #2588 by @tomdale.

Serializers and Adapters are no longer singletons.

Failing test included.
@sly7-7 they are slightly different:

`adapterFor` uses the preference `typeKey`, `application` then `this.defaultAdapter` 
`defaultAdapter` uses the preference `this.adapter` (default = `-rest`), `application`, `-rest`

So for example if you do `adapterFor('person')` now, it would lookup in this order:

- `adapterFor`: `adapter:person`
- `adapterFor`: `adapter:application`
- `defaultAdapter`: `adapter:-rest` (`this.adapter`)
- `defaultAdapter`:`adapter:application`
- `defaultAdapter`:`adapter:-rest`

If you remove the `this.lookupAdapter('application');`:

- `adapterFor`: `adapter:person`
- `defaultAdapter`: `adapter:-rest` (`this.adapter`)
- `defaultAdapter`:`adapter:application`
- `defaultAdapter`:`adapter:-rest`

I think having the default application wide adapter used before the -rest adapter makes more sense.

Given that `-rest` is hard coded in the `defaultAdapter` function it might make sense to remove `adapter: '-rest'` - this would only use a custom default adapter in `this.adapter` when it's been provided, otherwise it would use `adapter:application` if available and `adapter:-rest` otherwise.. This would then allow the removal of `this.lookupAdapter('application');` - and make the whole situation less confusing.

In regards to could the `defaultAdapter` logic move to `lookupAdapter`, I would say yes and no.. The main reason `lookupAdapter` was even created is to be consistent with `lookupSerializer` that I created - in the case of `lookupSerializer` the equivalent 'default' logic wouldn't really work there - so you could have different logic between the two functions but if that were the case I would prefer that `lookupAdapter` be removed all together - since it's only really been added for consistency.