Implement a new algorithm to eliminate TCO while preventing
premature execution exit by rewriting the evaluation tree and
replacing old nodes with new set of forms, for example the result of
some old form's evaluation, a body of a function or anything in
that nature. Couple the new forms with a possible new execution scope.
* Implemented Native function as IExprs so we can refer to them
like any other function. Checkout `NativeFunction`.
* `require` has been implemented as a native functions which
accepts one or more namespace descriptions and load them.
A namespace description is either a symbol with the ns name
or an `IColl` in the following form `(some.ns.name alias).
* A hashmap of strings to native functions has been added to the Runtime
which is used to resolve builtin functions.