Added tests for closures.
Updated the documentation.
Changed 'do' statement behavior to only pop the execution context if the control flag is not 'return' or 'error'.
This allows us to have a more detailed view of the execution context when some programs exit. An example is
the following program:
do
   local a = 123
   return a
end

When this program exits, we can now see that the variable 'a' is not created in the global scope.
Changed the way variadic expressions are generated and evaluated.
The following program is an example that could not work before
and is now fixed:
if not ... then
   return 0
else
   return 1
end
Updated outdated comments.
Added placeholder for metatable addresses in table structure.
Implemented setmetatable and getmetatable functions.
Implemented rawget. Partially implemented rawset.
Added error handling to 'rawset'.
Added getmetamethod/4 and callmetamethod/6 predicates which find and call a metamethod, respectively, based on its name. Also implemented the '__call' metamethod.
Implemented the '__unm' metamethod.
Implemented metamethods for arithmetic operators, i.e. '__add', '__sub', '__mul', '__div', '__mod' and '__pow'.
Implemented the '__concat' metamethod. Since the value_type/2 predicate has been removed, the equality operator is broken. This will be fixed in the next commit.
Fixed the equality operator and the 'type' function.
Added error handling for 'and' and 'or' operators.
Removed the callmetamethod/6 predicate.
Added the getcomphandler/5 predicate which chooses a metamethod for comparison operators.
The getmetamethod/4 predicate was changed to accept values instead of table addresses only.
Replaced code that uses the callmetamethod/6 predicate, and implemented the '__eq' metamethod.
Implemented '__lt' metamethod.
Implemented '__le' metamethod.