WIP: refactor lexer

Currently only accepts integers. Based almost entirely on Rob Pike's fantastic
talk on writing a lexer for Golang's template language.

Slides: http://rspace.googlecode.com/hg/slide/lex.html
UTubes: https://www.youtube.com/watch?v=HxaD_trXwRE
New lexer parses floats
New lexer parses single quote strings
New lexer will parse a symbol
New lexer will parse multiple lines

Kind of hairy to implement this -- I think there were some problems with
how we were matching newlines before. For now, just ignoring them until
we truly need load bearing newlines.
New lexer will tokenize a reference

(e.g.: to a variable, or a method, etc)
New lexer will tokenize call expressions

Well, most of them. Unsure about optional whitespace and whatnot.
Move state functions into separate files

Would really like to have these in a separate package, but I think that would
require writing an additional interface for the lexer that conforms to the

.emit()
.next()
.peek()
.ignore()

interface, and that's a bit more work than I'm willing to do at 9:34pm tonight.
Parser should be able to handle an empty file
{{squash me}} Switch from focused to pending tests
Parser can ignore newlines

Getting to the point where we'll need these for method definitions
New lexer can handle method declarations
New lexer ignores comments
Update tests for New lexer can parse comments and ::

Unsure if the current lexing for :: is correct. It feels like it should
potentially be a method if you write something like

module Foo; end
Foo::some_module_method(arg1, arg2)

But I suppose that could be handled in the parser.
New lexer works with assignment expressions
... and booleans
New lexer panics on unknown runes
New Lexer works with unary operators
... and binary operators
... and arrays