[WIP] Developer Documentation (and maybe a little refactor)

New developers on Numba need a more clear documentation ramp.  I see this as having a few parts:

* High level architecture overview
* How to extend the frontend (new types, new function signatures, type coercion, etc)
* How to extend the backend (new targets, boxing/unboxing, lowering different operations, etc)
* Specific overviews of key algorithms (type unification, data flow analysis, control flow analysis, construction of the Numba IR from opcodes, etc)

In the process of writing the documentation, we may decide that some refactoring of interfaces is necessary when we find procedures to extend parts of the system are hard to explain.
"is can be"