Implement background spinners

Using threading and a context manager, automatically advance a
spinner at a customizable frequency during a context, removing
some of the administrivia of running a spinner and enabling a
spinner to run during blocking calls

- Implement context manager methods in Infinite
- Add a threaded spinner to the tests
- Add documentation