mk: Add some serious documentation and 'make help'

'make help' is implemented in a fairly ridiculous way, using awk
to parse comments out of Makefile.in and displaying them.
mk: Remove the concept of 'snapshot transitions'

This way of doing snapshots hasn't been used since 2011.
mk: Move most of Makefile.in to .mk files

Because the build system treats Makefile.in and the .mk files slightly
differently (.in is copied, .mk are included), this makes the system
more uniform. Fewer build system changes will require a complete
reconfigure.
mk: Add NO_MKFILE_DEPS for turning off rebuild from makefile changes
mk: Improve build system help commands
mk: Move version info to top of main.mk

Just so it's easier to find.
mk: Address review feedback
auto merge of #12276 : alexcrichton/rust/issue-8449, r=kballard

This was just waiting for compiler-rt support, which was added in #12027

Closes #8449
auto merge of #12274 : brson/rust/mkfiles, r=alexcrichton

I've been working on binary installers and ended up taking this detour, which does a few things:

* It expands the documentation on the build system with new comments in Makefile.in
* It displays some of that documentation via `make help`
* Removes some unused and broken snapshot code
* Adds `NO_MKFILE_DEPS` to convenience makefile hacking
* Moves almost all of Makefile.in to files in `mk/`

The documentation provided by `make help` and its implementation are somewhat quirky.
Register new snapshots

This enables the parser error for `extern mod` => `extern crate` transitions.
extern mod => extern crate

This was previously implemented, and it just needed a snapshot to go through