Start of SAST

Parses variable declarations and assignments.

Checks for:
- repeat declarations of variables
- variable assignments of invalid types

The current layout of the `semantic_check.ml` will probably be adjusted as we move on. It might be easier to organize if we move out classes of AST tests to their own files but we can see how it starts to form itself as we go.

(Travis is seemingly broken right now but all builds and tests pass locally)