Lock spinner and add state

This prevents it blowing up if start is called more than once. Start can
now return an error if a running spinner is started.
Add test for multiple spinners