re-added a "ctags" target to CMakeLists
added parser rule for 'else if' statements

'else if' statements are really just nested 'if/else'
statements, just like in C.
converted Frames to LuciFunctions.

while everything is functioning as before, and I'm using one less
data structure, things still aren't pretty. CompileStates
still need converted into LuciFunctions and I haven't even thought
about how to improve the recycling of CompileStates/LuciFunctions
used in 'interactive Luci'.
removed framestack.

functions are now pushed onto the framestack. for now, this means
that return values need to be popped in order to pop the parent frame,
then pushed back onto the stack.
rearranging Luci's types...

each type has it's own header now.
add missing 'stack' functionality from LuciLists.

this allowed me to replace the interpreter stack with
a LuciListObj, using push, pop, and peek methods.
added flags field to LuciObject header :(

also cleaning up garbage collection code.
large commit for garbage collection.

this commit is PROBABLY going to be a throwaway.
I did all that work on getting a SIMPLE stop-the-world
mark-and-sweep garbage collector working, only to realize
how many C-functions allocate containers and append objects
to them. This breaks if garbage collection runs while the
container's children are being allocated... ARGH.
many :/ changes to get GC working.

I think marking is working properly, however
the sweep phase is doing something weird with the interpreter
stack. In the naive recursive fibonacci example, at some point while
executing a RETURN instruction, the object on the stack that should
be a LuciFunctionObj is a LuciIntObj... obviously broken.
garbage collection working!!!

there are some things to clean up...
I hate storing a single bit in LuciObject headers, so
hopefully I can move those to the GC Pool implementation.

I broke interactive mode, but I'll add it to the list of other
things I want to clean up/improve.
trying to fix interactive mode. may require overhaul.

something will be done about all the back and forth between
CompileStates and LuciFunctions.
many small fixes for interactive mode.

semi-improved main.c.
globals arrays are now leaking once copied from symtables.
they probably shouldn't be copied since they just point to
their parent function's locals array.
reverted symbol table implementation.

the symbol table can again 'release' objects when
`symtable_give_objects` is called. this is useful for
the globals since they shouldn't be copied around.
bug fixes and finishing up documentation
actually writing tests finally. far too late.

many of the bug fixes in the previous commit came from
these tests failing. they are currently all passing and should
be correct.