Parser & lexer tweaks.

* Fixed typo in `Parser.cs` (`ParseExpession` -> `ParseExpression`)
* The lexer now tracks the column number within the line, in addition to the line number to allow pinpointing exactly where a token starts in the file.
* Column numbers have been added and code has been refactored where relevant.
* Update bytecode saving/loading to include column number in debug info and gave the format a version bump.
* The lexer now enforces that a `LF` character must follow a `CR` character.
* The lexer now enforces that all multi-line comments must be terminated properly.
* The lexer can keep track of multiple line/column positions at a time. Used primarily for pinpointing exactly where an unterminated, nested block comment starts, but is also used to pinpoint where every token starts.
* Added a new boolean property to the lexer to check for `EOF`.
* All number parsing logic has been moved to `NumberParselet`. Parsing a number twice is unnecessary, and probably shouldn't even be done in the lexer.
* Hex and binary numbers are now parsed manually so they can be parsed directly to a `double`, rather than being parsed to an `int` and then casted, which felt like a kludge. It's less aesthetic than using `Convert.ToInt32`, but comes with added benefits, as it allows larger hex and binary values without overflowing.
* Added a new `Tag` field to the `Token` class to store additional information from the lexer to be used by the parser later on.