Initial work on ES6 modules
More modularization
Building an AMD file
Further progress towards modularization.

At this point, I have only 2 fails in the Node build, but I'm doing a
bunch of manual stuff locally and still have a bunch of hacks.
Make the Handlebars environment into an object

The idea is that the environment wraps up the mutable stuff in
Handlebars (like the helpers) and that you could theoretically create a
new one at any time and pass it in to Handlebars.template.

Every test makes a new environment and uses it in template compilation.
Move more testing mutations into the environment
Global Handlebars.compile uses its env

The basic strategy is that there will be a global Handlebars object for
the browser build, and that object will have a `compile` on it which
uses its environment in the compiler.

It will also be possible to glue things together manually by using the
AMD build and passing the environment to `compile` directly. Some of
these details are TBD.
Test cases for #599
Merge branch 'else-if' into es6-modules

Conflicts:
	dist/handlebars.js
Merge commit '87b5d4ee61605b026506e92c9e8873d867c5f150' into es6-modules

Conflicts:
	dist/handlebars.js
	dist/handlebars.runtime.js
	lib/handlebars/base.js
	lib/handlebars/utils.js
Merge branch 'master' into es6-modules

Conflicts:
	Gruntfile.js
	Rakefile
	dist/handlebars.js
	dist/handlebars.runtime.js
	lib/handlebars.js
	lib/handlebars/base.js
	lib/handlebars/runtime.js
	lib/handlebars/utils.js
	package.json
Fix cjs output and testing
Fix merge errors
Update grunt build target
Update logger for es6 modules
Generate parser as es6 module
Fix global Handlebars references
Break exception class out into a standalone module
Break safe string out into standalone module
Use proper default vs. module import semantics