Major project revision 1

## Motivation:
The two `master` branches have diverged considerably, with changes spanning over 3 branches and over 70 commits. Many of the changes introduced the last week were actually redesigns and, being interdependent, it was quite difficult to align them neatly with the topics of the previous PRs. Some of the commits turned out to conflict each other, and special care was needed to ensure that merging produced the desired results. There were even cases where the auto-merge would succeed but the resulting code would be broken. I ended up manually inspecting almost ever file. Luckily, now the 3 branches are merged, the changes make much more sense when viewed as a whole.

## Purpose:
The purpose of this PR is to be a comprehensive report of the last week's progress, so that we can do one full review and move on.

## Major changes:
* Rewrite lexing of string and char literals. Implement proper escaping.
* Expand line tracking.
* Redesign AST/Type class hierarchy.
* Introduce unit testing.
* Semantic analysis of user-defined types. Basic validation of type annotations.
* Improve symbol table.

## Changes per file:
### Lexer:
* Expand public interface of `lexer` module to allow testing.
* Error message during panic-mode recovery outputs state (if relevant).
* Use a LoggerMock if no logger is provided. 
* Rewrite lexing of char and string literals:
  * Simplify and annotate regexes; build master regexes piece by piece.
  * Lex well-formed tokens separately from malformed ones.
  * Use python built-ins to return properly escaped values.
  * Terminate string literals with null byte.
  * Allow empty string literal. Refactor error for empty character literal.
  * Fix return value in literals ending with a single or double quote.
  * Simplify error reporting. Drop errors of char/string literals spanning multiple lines.

### Parser:
* AST and Type nodes are decorated with line info during parsing.
* Completely delegate construction of type nodes to `ast` module.
* Move default `start` argument out of `parse` function, to enable unit testing of individual grammar rules.
* Move `verbose` argument from `parse` to `__init__` to allow for better logging.
* Expand grammar to allow for redefinition of built-in types. Delegate relevant error to typesem module.
* Separate definitions of constants from definitions of functions. 

### AST/Type:
* Renaming: `type.py ->  typesem.py`
* Moved all AST nodes to `ast.py`
* `Tdef` nodes: Replace `name` attribute (`string`) with a `type` (`User`) attribute for easier semantic analysis and better error reporting.
* Refactor and extend node hierarchy to eliminate duplication and enable "pythonic" use of AST nodes.
* Add map of built-in types from `parser`.
* Add error reporting for built-in type redefinition.
* Replace `String` built-in with `Array of Char`. Closes #9.

### Error:
* DRY: Merge `DummyLogger` and `LoggerMock`.
* Abstract common Interface of `Logger` and `LoggerMock`

### Typesem:
* Rewrite of `Table`:
  * Don't create new `Type` objects; reuse AST nodes.
  * Store type info using only dictionaries; leverage `__eq__` and `__hash__` of the respective AST nodes.
  * Simplify code: use `try` blocks instead of double checking.
  * Allow cross-referencing of user-defined types and constructors to ease type inference.
* Errors now contain line full line info, including previous definitions, etc.
* Add type validation. (Needed: unit tests)

### Symbol:
* Add `type` to entries.
* Add `Constant` and `Variable` classes for creating specific types of entries.
* Separate entry creation from entry insertion; the former is done via public methods, the latter via private ones.
* Delegate error string formatting to `error` module.

### Tests:
* Rename `test` folder to `tests`.
* Add almost complete suite of unit tests for `lexer` module.
* Add unit tests for `ast` module.
* Add complete suite of unit tests for `typesem` module.
* Drop functional tests replaced by unit tests.

### misc:
* Beautify code.
* Fix typos and wrong comments.
* Add a bunch of docsrings.
* Make `logger`s public members.
* Purge testfiles from spurious whitespace.