Add save/restore_irq

Factored irq functions into a separate file.
Add support for pyb.micros() by using the systick timer.

I also removed trailing spaces from modpyb.c which affected a couple
of lines technically not part of this patch.

Tested using: https://github.com/dhylands/upy-examples/blob/master/micros_test.py

which eventually fails due to wraparound issues (I could fix the test to compensate
but didn't bother)
stmhal: Use MP_OBJ_NEW_SMALL_INT directly in pyb.micros/millis.

Also some whitespace cleanup.
teensy: Fix multiple definition of irq functions.
stmhal: Improve efficiency of SysTick IRQ and HAL_Delay.

SysTick IRQ now increases millisecond counter directly (ie without
calling HAL_IncTick).  Provide our own version of HAL_Delay that does a
wfi while waiting.  This more than halves power consumption when running
a loop containing a pyb.delay call.  It used to be like this, but new
version of HAL library regressed this feature.
tests: Add test for pyb.disable_irq and pyb.enable_irq.
Fix sdcard_power_on to not do anything if the card is already powered on.