Remove duplicate declaration of FileResolver.
Stop asserting that formatters have `reference` and `build` functions.

`reference` isn't even called directly, and there are a whole bunch of other methods that are called directly that we don't even check.
Improve and fill out the inline documentation.

We also just refer to the global names for objects in ast-types.
Inline an unnecessary variable.
Fix whitespace.
Create a base class for formatters.

This class is almost entirely abstract and requires subclasses to implement their interface.
Fix type signature for the Resolver typedef.
Remove unused getExportReference functions.

These were left over from a much older version of the Matrix.
Remove an unused function from Module.
Fix a whole bunch of types and type annotations.
Test out a version of the CommonJS formatter that outputs ES3.
Disallow updating exports since this version does not have bindings.
Use a computed string property since 'default' is not allowed in ES3.
Remove Object.seal() since we have static checking.
Allow export reassignment.
Split exports into early and late exports.

Function declarations can be exported early because their definitions are hoisted to the top of the scope. This allows for immediately-invoked imported functions in cyclic modules to work.