Implemented recursive function declarations

While not required, this addition encouraged several large changes
to the parsing structure. The parser no longer makes multiple passes
to determine the size to avoid exponential growth of parsing passes
for significantly nested functions. Functions should normally be
created once and sit in memory for quite a long time so the savings
from accurately allocating memory are benificial, however this
can be accomplished with simply triming memory after generation.
However, in cases where the heap always aligns to powers of 2,
accurate allocation benificial at all.

Because of this, memory reallocation was added to take advantage
of potential memory reusage and prevent fragmentation. I personally
don't really care for the api for C stdlib, so I may change the
function declaration later for specific use cases. I may seperate
the reallocation into memory_double and memory_trim for their
specific uses.

This commit also marks the completition of all major language
syntactical constructs.