Moving grammar as recursive descent parser

A manually written parser will allow more flexibility in its usage.

Really thats about it. The overhead of interfacing with Bison was
annoying, but alternatives such as Lemon don't allow much flexibility
in the way of naming things and require dynamic allocation. Writing a
recursive descent parser can just use the C stack (may change later)
and allows basically any modification nescessary.

Was avoiding a handwritten parser due to the esoteric nature of
hand written automata. But I found an interesting scheme for writing
a recursive descent parser that relies heavily on tail-recursion,
switch statements and many static functions to resembles an actual
grammar very closely.
Fixed several bugs in tables and parsing expressions

- Hashing val when inserting at key
- Allowed expressions to follow expressions without seperator
- Disallowed newlines in parens
- Realized token lookup was broken
- Fixed off-by one in fnp_call
- Added predefinitions of rules in parser
- Added better error reporting, still needs to be replaced
Changed token lexing strategy and quite a bit of syntax

Because I'm planning to generate bytecode, the actual parsing will
not be that time sensitive. A switch statement will let the compiler do
as it wishes.