Removed unneeded constructer from LineCommentToken
Added lexer states

Also renamed lexer.buffer to lexer._buffer for consistency, and changed token_classes to tokenizers in lexer and nix_lexer, which I think is a better name.
Made nix_lexer track indentation and exit the production state

The production state should disengage when the indentation drops back to (or below) the indentation level that the production state began on.
Split up symbol token into token literal and operator

This made possible by the lexer states
Made popping past the first init state a no-op instead of an error

I think this is better, since this can be caused by input text and ideally the lexer should keep going as long as possible to detect many errors
Made { and < enter the init state, and > and } leave it