Optimize nested scope creation

We can copy the hash table from the parent scope, rather
than constructing it from scratch.

This takes us to:

	% rm -rf /tmp/pkg; (for i in {1..50}; do for j in {1..100}; do echo "package pkg { class A_${i}_${j}___(val a: Int, val b: Int) }"; done; done) > sandbox/A1.scala && time qbin/scalac -Ybackend:GenASM -J-Xmx1G -J-XX:MaxPermSize=400M -d /tmp sandbox/A1.scala;

	real	0m19.639s  // head~1 was 0m35.662s
	user	0m41.683s  // head~1 was 0m58.275s
	sys	0m1.886s

In more detail, this commit:

  - Removes the unused `fingerprint` constructor parameter from
    scopes. This is a remnant from a previous optimization attempt
  - Leave only one constructor on Scope which creates an empty
    scope
  - Update the factory method, `newNestedScope`, to copy the hash
    table from the parent if it exists. We can rely on the invariant
    that `outer.hashTable != null || outer.size < MIN_HASH)`, so we
    don't need `if (size >= MIN_HASH) createHash()` anymore. This
    used to be needed in `Scope#<init>`, which accepted an aribitrary
    `initElems: ScopeEntry`.
  - Update subclasses and factories of `Scope` in runtime reflection
    to accomodate the change. Pleasingly, we could actually remove
    the override for `newNestedScope`.
  - Unit tests the functionality I'm touching
Fast path in Namer for methods without defaults

Either direct defaults, or directly inherited.

The avoids `addDefaultGetters` in most cases, and the expensive
duplication of trees therein.
Optimize enforcement of dependent method type restrictions

  - No need to check the result type, as dependent method types
    are now enabled unconditionally.
  - This also means we can only need to check methods with two or
    more parameter lists.
Address pull request feedback