Support for IO inputs in the lexer.

Using IO/StringIO objects one can parse large XML files without first having to
read the entire file into memory. This can potentially save a lot of memory at
the cost of a slightly slower runtime.

For IO like instances the lexer will consume the input line by line. If a
String is given it's consumed as a whole instead. A small side effect of
reading the input line by line is that text such as "foo\nbar" will be lexed as
two tokens instead of one.

Fixes #19.
Benchmarks/profilers for IO inputs in the lexer.
Rewind IO input upon resetting the lexer.
Boilerplate for the XPath lexer.
Cleaned up XPath lexer boilerplate a bit.