Sharing GenBcode backend between scalac and dotty

This PR abstracts GenBcode implementation classes from existence of global using forwarders, which would have a different implementation in dotty.

The main class here is BackendInterface that defines everything that backend uses.
While it would be good to have backend use less that 150 methods on `Symbol` this commit doesn't address this issue: it tries to not introduce any changes in behavior.

In order to not loose perfromance and not allocate options during pattern matching this implemtation relies on name-based pattern matching with preallocated objects, this makes BackendInterface non-thread safe, but as of now it is used only in single thread. If several threads will ever be used to transfrom AST to asm bytecode than each of threads will need to own its own instance of BackendInterface.

@lrytz please have a look.
For this particular abstraction, actual ConstantTag==Long values are same in dotty and scalac, so if this particular place introduces a slowdown it could be solved.
The way how I observe how fast is the compiler is time that is taken to compile standard library. Before 2d22839 it was 10% slower. After I didn't check.