First pass at experimental optimization, -D js_flatten.

It generates the class hierarchy as "flat" as possible without using
nested objects. This allows JS minifiers to compress classes down to one
letter, and seems to run quite a bit faster too:
http://jsperf.com/class-declaration
Flatten static method and enum references.
Under js_flatten, all statics need to be explicitly defined.
Generate dotted aliases for static fields.

...this static field flattening probably isn't going to work out.
Unfortunately it doesn't work so great with Dynamic, even with this
commit. I'm not sure how to handle code like this:

	class Evil {
		public static var staticMember :Int = 1;
	}
	var evil :Dynamic = new Evil();
	evil.staticMember = 2;

Package flattening on the other hand has been pretty solid, and is more
bang for the buck anyways.
do not try to find casts when types are unknown (closes #2041)
disallow static constructor when class is typed (closes #2037)
Only flatten packages and not static fields.
Replace underscores to prevent collisions in flat paths.
Merge branch 'js_flatten' into development

* js_flatten:
  Replace underscores to prevent collisions in flat paths.
  Only flatten packages and not static fields.
  Generate dotted aliases for static fields.
  Under js_flatten, all statics need to be explicitly defined.
  Flatten static method and enum references.
  First pass at experimental optimization, -D js_flatten.
Mention -D js-flatten in the change log.
Test git change
revert ObjectMap constraints
force inlining of abstract "this" only if it is actually written (closes #2050)
add pf_can_skip_non_nullable_argument (closes issue #2039)
Revert "optimize exhaustive one-case matches (closes #2019)"

This reverts commit a18ce31a610d06cfa9a3a1282bbc1c13224a9ffa.
make sure we optimize for completion when we are in the good file (closed #2017)
minor fixes in debug passes code
make sure we set the pass to PTypeExpr even for lazy vars/functions in display mode
merged
merged