* 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.
Add the `let` sform not in the triditional way. In our case
the let scope is available to the bindings. Similar to clojure's let
and let* in triditional sense.
Also add the function `MakeErrorFor` which gets an extra arg, an
`IExpr` and returns an error with the location of that expression.