[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.
Yeah, I couldn't decide.  It mostly is there to raise awareness of the wrapper, and being at the end of the document, they can stop reading whenever.  I'm annoyed sphinx refuses to syntax highlight it (which makes assembler "more fun"!), so I might cut it just for that reason.