implement symbol table (#79)

This ended up being easier than I thought (or at least that's what I'm hoping)
Do we really need separate methods for each type of thing that gets added to the symbol table? This looks like redundant code to me.