Tweaked spi locking to increase granularity
 - Locking now locks at begin and unlocks at end instead of for each call
 - Perhaps a token system could be used to stop bad threads from calling functions in wrong order, but we'll expect programmers to be smart instead...for now