Implemented interrupt driven / software buffered canbus transmit

Updated the example program to use this new functionality.

Added code to automatically try to reset the canbus hardware if errors are happening. This should prevent things from locking up if the hardware isn't connected to canbus or something otherwise goes wrong.
Properly initialize buffer counters even when resetting bus

Do hard resets on the MCP2515 instead of soft

Wait a bit when trying to fix canbus errors to limit rate of thrashing.
Fixed a problem where sending large numbers of frames while the canbus was in error state would lock up the sketch.
Declared some variables volatile that always should have been.
Merge pull request #3 from collin80/master

Fixed lock up when canbus wires are improperly connected or canbus otherwise faults