Interrupt related fixes

I have made some interrupt related changes.

First of all, most of irqHandler() was rewritten to be simpler and easier to follow, while still working properly for all interrupts (works with at least timer and gpio interrupts).

Second, functions for handling GPIO interrupts were added. Maybe more detect event types should be added.

Lastly, there was some weirdness in the way things were done in prvSetupTimerInterrupt in port.c. I don't think the interrupt vectors should be cleared again; not doing this allows for a window between it being done and the scheduler starting to setup your own interrupt vectors. Also, as RegisterInterrupt activates interrupts, it should be called after the timer registers are set.