Added a bunch of code to free created objects. One notable change was
to return the next token from FreeToken() to cut down on boiler plate
code that kept track of a "consumed" token. Now all that just happens
in FreeToken() and I don't have to worry about that anywhere else.
Also added FreeNode() to free all nodes. This wasn't done before at
all. Like FreeToken(), it will return the next node in the list to
avoid having to track that stuff in the calling context.
Fixed parsing the tokens so it actually worked. Only headers are
currently implemented, but header nodes are now properly parsed and
everything else is properly ignored.
- Get the input filename from the command line
- Added in a bunch of checks to avoid segfaults
- Added some more debug info in places