Run Ember in node

This commit removes any strict dependencies on browser-only APIs.
Anything user agent specific (such as window, document, etc.) are
abstracted out into a new `environment` object.

Currently we feature detect whether a DOM implementation is available
and only enable certain behavior if so. The intent of the feature
detection is to determine if a DOM implementation is available, not
whether we’re running in the browser or in node. This makes it possible
to run Ember in a node environment with a “fake” DOM.

This commit also introduces some refactoring to the location APIs, such
that hardcoded document/history/navigator dependencies are reduced.

Note that some APIs are guarded with `environment.hasDOM` checks.
Code inside those guards can freely use DOM APIs, but some of those
APIs are needed for full server-side usage of Ember. This is a first
step that is designed to explicitly separate out code with DOM
dependencies from isomorphic code. Further PRs will implement the
Renderer and Location APIs for non-DOM environments.
@stefanpenner This discussion is out of scope of the current PR, we will be providing more detail shortly once we start implementing DOMless render. Let's revisit the discussion once we've had time to write down our complete thoughts.