This commit consist a series of fixes to make the reach the main
goal of the commit:
* Fix the 'MakeNodeFromExprs' behavior so it returns a pointer
to a node and if the number of input exprs is zero then nil.
* Fix all the eval loop to return immediately in case of any error
duh!
* Add a `errtype` field to `Error` with an `ErrType` enum type
that indicates the type of the error, the type being syntax,
semantic and runtime error at the moment.
* Rename some of the Error functions to match the error type. For
Exapmle `MakeSyntaxError` and `MakeSemanticError`
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.