Fix #1214: Static methods in the IR.

Trait impls have been eliminated, in favor of supporting
static methods in any kind of class.

Trait impls are encoded exactly in the same way as on the JVM,
i.e., a class directly extending Object, with static methods.
This is currently the only use of static methods in the IR, but
in theory it can support static methods anywhere.
Rename ApplyStatic to ApplyStatically, and related renamings.

Hopefully the new naming scheme is more consistent, and less
confusing:

* Apply / methodsCalled: instance method, dynamic dispatch
* ApplyStatically / methodsCalledStatically: instance method,
  static dispatch
* ApplyStatic / staticMethodsCalled: static method
Merge pull request #1350 from sjrd/static-methods

Fix #1214: Static methods in the IR.
Fix #1021: IR-check assignment to val fields

Assignment to immutable val fields is only allowed in constructors.

Note that scalac generates code in which vals in traits are
initialized through a synthesized setter. These setters are
indistinguishable from normal setters at the IR level. Therefore, IR
emitted by scalac only emits mutable fields. This restriction might
not apply to other tools generating IR.

This commit allows the optimizer to optimize things based on the
immutability of a field.