ut: fix up unit test clean target name
i2c vm: extend ALU and refactor

* Register state and RAM are now stored directly in the
  I2CVM UAVO struct to save memory
* Add generalized handling of short-immediate (simm) data
  in opcodes.  simm data is treated as a signed, 16-bit value.
* New opcodes:
  * SET - rd = sign_extended(simm)
  * SL  - logical shift left (reg <<= simm)
  * ASR - arithmetic shift right (unsigned_reg >>= simm)
  * LSR - logical shift right by (signed_reg >>= simm)
  * AND - logical AND (reg AND reg)
  * OR  - logical OR (reg OR unsigned_simm)
  * ADD - addition (rd = ra + rb, rd += simm)
  * MUL - multiplication (rd = ra * rb, rd *= simm)
  * DIV - division (rd = ra / rb, rd /= simm)
* I2C transfers can now occur from any offset in virtual RAM
* dropped floating point registers
* explicitly fault on NULL or zero-length programs
gen-i2c: update demo programs to match new VM opcodes

Now supports mathtest for basic ALU tests and endiantest for
testing endian conversion routines.
i2c vm: add unit test suite for the I2C virtual machine

Nearly all opcodes and many boundary conditions are tested.

Does not test I2C transfers yet.
i2c vm: convert all parameter docs to doxygen format
gen-i2c: split demo programs out from the main module

Built-in i2c virtual machine programs are now each stored
in their own .c file so that they don't clutter the main
module source.

This also allows new i2c vm programs to be maintained out-of
tree with less merge conflicts.
vm mag/baro: sign extend and scale magnetometer readings

This is also an example of how to sign extend in the VM.

Use logical shift left followed by an arithmetic shift right.
i2c vm: try to make i2cvm UAVO update in UAVO browser