Instead of keeping large pipeline queues, flush when full.

As an alternative to keep a very large outgoing buffer to handle many
messages being queued up before sending, we flush the queue out to
USB/UART/Network whenever it is full. This doesn't have any effect on
incoming CAN messages (if we don't flush it incrementally here, we would
just block after returning from the translateSignal function while
sending data then). This approach requires much less RAM and can still
handle the occasional CAN message with many signals in it.
Add include guards for stats-only initialization.
Make a test case depend on a variable queue length instead of hard coded.
Fix a stats log output format string.