Merge pull request #2217 from JamesIry/master_7006b

SI-7006 Fix the unreachable test
Move future-spec tests into classes instead of top level objects

The future-spec test classes were all top level objects which meant
their constructor bodies were running in a static initializer. Since
the constructor bodies were doing concurrency work they were just on
the edge of creating deadlock situations. My work on moving lambda
bodies to methods pushed them over the edge, but any number of other
things could have done so just as easily. This commit makes the
test code run in the constructors of regular classes which removes
the deadlock hazard.
Move lambda bodies to methods on their owning class

This commit makes the bodies of lambdas ordinary inner methods, which
then get lifted to top level methods by LambdaLift. The anonymous
FunctionN class for the lambda now has a simple apply method that
delegates to the new method. A -Y flag is added to disable this
change.

Currently there are issues with lambdas defined in a call to a super
constructor so when that case is detected Uncurry falls back to the old
behavior of inlining the lambda body into the anonymous FunctionN class.
A -X flag is provided for experimenting with emitting a static method
in those circumstances.

Several existing tests are modified to take into account the signatures
of the newly generated methods.

Two new tests are created. One ensures that anonymous functions
continue to work. The other ensures that the bodies are being
placed in methods on the owning class instead of the FuncitonN
class.