Optimize post typer phase typechecking

Don't check for double definitions, and don't look for
synthetics.

This optimization was already applied for Erasurer,
but by moving the threshold back we can speedup
uncurry.
Optimize TreeDSL

 - arity overload for BLOCK to avoid array creation.
Use eq rather than == for hot name comparison
Move constants out a level

Avoids reading system properties so often.
Avoid type maps in later phases

By-name and repeated parameter types won't exist
post typer.
Optimize ByteCodeWriters

Only run the error diagnostic for "you have a file in the way, dufus!"
if we hit an IOException.

Also routes around another layer of `isDirectory` assertions in `AbstractFile`

Saves a large number of repeated calls to file("/target/classes/com").isDirectory.

Even with the pipelined bytecode emission by GenBCode, this seems to offer a
small improvement in benchmarks.

Manual Test:

    % cat sandbox/test.scala
    package foo {
      package bar {
        class D
      }
    }

    % touch foo
    % qbin/scalac sandbox/test.scala
    sandbox/test.scala:3: error: error writing class D: ./foo/bar/D.class: ./foo is not a directory
        class D
              ^
    one error found
    % rm foo
    % mkdir foo; touch foo/bar
    % qbin/scalac sandbox/test.scala
    sandbox/test.scala:3: error: error writing class D: ./foo/bar/D.class: ./foo/bar is not a directory
        class D
              ^
    one error found
Optiomization in TailCalls

Use per-run cached symbols for && and ||.
Optimization in transformStats

List#filter always returns a new collection. The common
case here is that the transformed stats don't contain EmptyTree,
so speculate on that outcome and run through the list once first
before calling filter.
Refactor typedBlock

So we can see the logic that surrounds the "Skylla and Charybdis
of anoymous classes" and make a straight-through path for
post-typer block typechecking.
Optimise Depth

Avoid value class boxing in call to Ordered.<
Avoid a needless field in Scope

 - Move constants to the companion object
Optimize Symbols

  - mixin TopLevelSymbol to symbols initially owned by package classes,
     this trait shortcuts name / owner / isTopLevel / isLocal
  - refactor typeParams to make it easier to profile and to reduce the bytecoede size on the fast path