Fix segfault in Lisp when calling variadic function.

Originally a segfault could occur due to an issue with how arguments
were cleaned up after a variadic function call. After the function
call the following assembly was generated:

add esp, nargs

Where nargs was the number of arguments passed to the function. This
did not take in to account that for variadic functions, the last
several arguments are CONS'd into one argument, meaning that calling a
variadic function with <>1 variadic argument would result in a broken
stack.

Specifically this issue came up in the implementation of REDUCE, which
relied on the variadic FUNCALL.
diff --git a/src/lisp/lib/std.c b/src/lisp/lib/std.c
index d4c4c25..85221ea 100644
--- a/src/lisp/lib/std.c
+++ b/src/lisp/lib/std.c
@@ -104,12 +104,23 @@
 	return val;
 }
 
+value_t l_num_eq(value_t a, value_t b)
+{
+	if (!integerp(a) || !integerp(b))
+	{
+		return nil;
+	}
+
+	return (a >> 3) == (b >> 3) ? t : nil;
+}
+
 void load_std(struct environment *env)
 {
 	add_c_function(env, "+", l_plus, 2);
 	add_c_function(env, "-", l_minus, 2);
 	add_c_function(env, "*", l_times, 2);
 	add_c_function(env, "/", l_divide, 2);
+	add_c_function(env, "=", l_num_eq, 2);
 
 	add_c_function(env, "car", car, 1);
 	add_c_function(env, "cdr", cdr, 1);