Merge branch 'dev' into json
Begin process of allowing "deriving" on type aliases.
Add basics of "deriving" for ADTs and type aliases. Only parse it for type aliases at the moment.
Merge branch 'dev' into deriving
Improve some parser code by adding type annotations, removing unused dependencies, and using prefixed imports
Begin switch from current FFI syntax to "port" syntax
Add basics of properly handling ports
Merge branch 'master' into dev
Merge branch 'js-integration' into dev
Add JS as a possible Derivation, correct binary serialization, add error when serialization goes wrong.
Make Binary serialization code nicer
Get rid of Transform.Optimize, which is currently unused
Chenge representation of Expr, add ports representation

Get rid of the unused t and v type variables. Add the def type
variable, which models the fact that type annotations and definitions
start separate, but need to be combined before most stuff goes down.

Ports have the same structure as definitions in that annotations and
definitions are separate at the source level and need to be combined.
The same technique used in Expr is now used in Decl as well.
Update basic parsers to use the new formats for Expr, Declaration, and Port
Move `boundVars` function into SourceSyntax.Pattern
Update to match new Module type
Switch to new format for Expr, Def, and Module
Create way to crawl over all lets in a program, transforming defs and ports

Used to combine type annotations with definitions and find ordering
problems with Definitions and Ports
Make "combineAnnotations" a part of parsing a program
Update to match new port and decl format