SPI bus sharing improvements on JS side

This cleans up and simplifies a lot of the initialization (and other JS control) code path so it doesn't set the SPI select lines outside of "owning" the bus.

The main lingering concerns I have are:
- the SPI interface `.initialize` call is now a no-op and should just get cleaned up out of this module
- the SPI speed for controlSPI seems to affect data SPI (if left at default playback gets choppy); perhaps the C code is not initializing its own SPI communication or is assuming the JS code initialize calls are doing it for them
- generally the playback lock stuff doesn't seem quite right on the JS side, but haven't quite traced through how it's supposed to be working yet
- and of course the C shim side doesn't share locks yet