Arduino micros() is unreliable, replace with our own timer API.

This fixes a source of a problem that blocked the development for a
while.  Possibly due to the interrupts being disabled inside the
WS2811 output function or for some other reason micros() was
returning veyr unreliable results, lower than expected and I had
been looking for the cause of the calculations coming out wrong
pretty much everywhere except in the stock timer functions.  At about
300 iterations per second, micros() returned about half the real
value, and closer to 50 fps it was approaching 0.9 of the actual
value.  The values were a little random too, jumping up and down
about 5%.
prog_uchar deprecated in new avrgcc's, use uint8_t.
Fix the text display and use a slightly optimised version.

Still pretty slow :(  About 231 fps, ideal would be about 800.
Spread the gyro calibration readings in time a little.

The calibration doesn't really matter much with the MPU6050, this gyro
seem to have a pretty stable zero value that could be hardcoded.
Comment clean-up.
Rough initial angle calculation from accelerometer.
Try to force -O3 on the hotpath functions.
Casts to allow more flexible timing, better fixed-point rounding.
Configure the accelerometer for +/-8g range, instead of 2.
Online calibration time trigger (at most every 150ms).
Debug code for FPS output to serial.
Reduce gyro zero rate online calibration factor.

Seems the calibration gives little benefit now that the gyro integration
works better.
Reformat: use tabs for indentation.
Read time once in gyro_update.
Rename prog_slow and prog_fast_multi.
Use a LUT instead of a big switch for led programs.