JS backend: break label should be JsNameRef, not String

The reason is to make it easier to distinguish
between different break labels (that's valid on same level).
JsNameRefs can be distinguished by their JsName.
JS inline: added deepCopy() method to JS AST nodes
JS inline: added InlineableResult
JS inline: added FunctionInlineMutator
JS inline: added JsInliner
JS inline: save static ref to JsFunction in JsName
JS inline: collect defined functions
JS inline: save inline status during translation
JS inline: inline function calls
JS inline: run JsInliner after AST is built
JS backend: made JsInvocation arguments modifieable
JS backend: made JsBlock statements list modifieable

Inliner should be able to add statements of inline function to JsBlock
JS backend: made JsNameRef name modifieable
JS backend: made JsScope hasOwnName method public
JS inline: added invocation utils
JS inline: added inlining context utilities
JS inline: create JsInliningContext per function processed by JsInliner
JS inline: alias arguments and local variables
JS inline: replace returns with result variable assignment and break
JS inline: support inline extension functions