AST: Add precondition assertions for type parameter
Parse: rename some parse rules for clarity
Parse: Split simple_expr rules into several
Parse: Split for_expr rules into several

PLY doesn't allow deducing which grammar rule matched
and this often causes bugs.

We had a bug with `for` where all `for`s were `downto`
`for`s due to a string comparison which is not the responsibility
of the parser, but the lexer.

This fix makes it harder to introduce such bugs.
Type test: optimize=0
Test type: More verbose functional testing
Makefile: Put unit before functional tests
AST test: Regression test for __eq__ use of .type

__eq__ in AST Nodes assumes two objects of the same class
have the same attributes (no attributes are added in runtime).

This is not true with the current type table, because it modifies
ast.Constructor objects to add the `type` attribute. This regression
test ensures equality works between ast.Constructor objects that
are constructed manually and those that are passed through the type
table.

This is fixed in #25 and the regression test should pass.

This is related to the fact that semantic checks are currently done
before parsing is completed - this will change in future versions.
Parser test: Optimizations

* Memoize parsers at class level
* Use setUpClass() for simple expressions used across tests
Parser test: def_list test
Parser test: Don't test implementation detail states
Parser test: Add test for function def & improve param list test
Parser test: Beautify tests for shorter lines
Parser test: Test that each built-in type is parsed
Parser test: Test clauses and patterns
Parser test: Include `mod` operator in boolean expression tests
Parser test: begin/end, func call, constr call, simple expr seq
Parser test: More expression tests

* array_expr
* paren_expr
* conid_expr
* genid_expr
* constr_pipe_seq
* tdef & seq
* typedef & type_seq