Update system log to use uint32 timestamps
Add lightweight performance counter module

Module configures a freerunning 32-bit timer running at the same
frequency as the CPU instructions.  An arbitray number of perormance
counters can be configured to micro-profile individual regions of code.

Calling PROFILE_START(counter_id) captures the current timer value.
Calling PROFILE_END(counter_id) stores the elapsed time since the
last call to PROFILE_START with the counter id.  The times can be
recalled later using perf_get_counter.

I used this to fix a huge flash memory performance problem.
Add profiling and fix giant performance problem

Due to the way the SPI peripheral was initialized, it was not running
at full speed.  Evidently, you must set the SPI clock frequency
before setting the SPIEN bit to enable the module.  Failing to do
this causes the setting to be ignored.  This manifests in reading and
writing from flash taking between 3 and 10 times longer than necessary
and causing performance issues in construct_report as well as making
modtool reflash run very slowly.

Using the new perf module, I tracked this down and fixed it.
Add support for reading performance counters and arbitrary RAM

- adds API interface for reading perf counters
- adds non-negative validator for integer types in typedarg
- adds API interface for reading arbitrary RAM locations for debugging
Add support for new report format in reportinator tool

- Uses uint32 timestamps rather than 6-byte datetime codes
Add support for reading uint32 timestamps in system_log

- Needs to be extended still to compute the proper date and time
from the timestamp (timestamp stores elapsed time since midnight
1/1/1 2000)
Add MIB command for building a report on demand and dumping it
over the bus.
BUGFIX: off by one error in firmware cache

Would allow 8-bit firmware to overwrite bucket 4,which is controller
firmware only.  Should not have caused any problems but it's incorrect
and simple to fix.  modtool reflash would have overwritten the bad
data before reflashing the controller anyway.
Add support for perf counters and reading ram

- also drive bus voltage transistor rather than just letting it
get pulled up to VCC to make it more robust against noise.  I do
not believe that this caused a problem before but it's better to
drive signals than to let them be pulled up by high value resistors