Add divby0 fault handler and abstract things better

We will eventually want an architecture dependant way of switching on
our fault numbers instead of the highly x86 specific way we are doing it
now.  That said, the way in which faults are handled should be the same
across architectures for a given scheduler and a given 'type' of trap.
I started abstracting things a little bit, with this in mind, but there
is still a long way to go. We can cross that bridge when necessary.