Run native code in a PlainContext, not a BailoutContext.

This is required as while Closure::execute handles Bailouts correctly, the
generated code doesn't handle Bailouts when calling other functions.

This could also be fixed by generating code to handle Bailouts or by generating
code to switch to a PlainContext for the duration of any calls to other
functions, but those approaches require more effort and generate more and
slower code for the common case that all the control flow gets inlined in the
generated code.
Factor the repeated code for propagating Bailouts into a common function.
Fix typo
Make BuiltInFunctions globally unique.  Previously the function in base and the
one from BuiltInFunction::obtain() were different objects.
Fix errors in control flow.
Add type handling utility functions.
Basic blocks that have already been terminated (e.g. by 'return',
'break', 'next' or an error) can't be merged into a following phi
node.
Add missing value checking and type casting on the function object when
evaluating expressions.