Cleanup warnings

1. The `warn_missing_spec` flag is obnoxious, and overkill when we properly dialyze. Removed.
2. Removed a bunch of miscellaneous warnings about unused variables, functions, and shadowed variables.
3. Added dialyzer to the Makefile.
4. Fixed several dialyzer warnings.