[BUGFIX beta] Object.create(null) in Ember.inspect

This commit resolves an issue where objects passed to Ember.inspect that
contained an `Object.create(null)` object as a property would cause an
exception to be thrown.

I hit this in my app because we were `Ember.inspect`ing objects (a model
in this case) that had their container property set. The container’s
registry as of 1.8.0 is (you guessed it) an object with a null prototype.
[BUGFIX beta] Extracts computed property set into a separate function

This is done to work around V8 (it cannot optimize functions with try
blocks).

Some comparisons from a real app:

`defineProperty`

Before:
![defineproperty
deopt](https://cloud.githubusercontent.com/assets/1131196/4164553/ad42a504-34f6-11e4-92cc-fdf17e88cc22.png)

After:
![defineproperty
cp-set](https://cloud.githubusercontent.com/assets/1131196/4164559/bf012a86-34f6-11e4-9bba-e5b2dc378946.png)

`watchKey`

Before:
![watch - key
deopt](https://cloud.githubusercontent.com/assets/1131196/4164570/e518cc88-34f6-11e4-9d66-97901a75161e.png)

After:
![watch-key -
cp-set](https://cloud.githubusercontent.com/assets/1131196/4164573/ec00d28e-34f6-11e4-8798-222b1ee985bf.png)
Merge pull request #5577 from emberjs/inspect-null-prototype

[BUGFIX beta] Object.create(null) in Ember.inspect
Merge pull request #5547 from twokul/cp-set

[BUGFIX beta] Extracts computed property set into a separate function
Created Em.Array#arrayFirstLastObjectChange abstraction.

This is in order to be able to override the
Em.Array#firstObject/lastObject notification implementation which by default
calls #objectAt(0) and #objectAt(length-1).

These calls are not optimal in case of e.g. sparse RecordArrays which would
trigger unnecessary content[index] requests.
Added a firstObject/lastObject cache checks.

Basically the contents of https://gist.github.com/mmun/877bad33158578a8609b