text: Title: Synchronous spinner
  Body: Support synchronous spinners which switch frames upon explicit request from a working thread like.
  
  ```python
  with Halo(spinner='dots') as spinner:
    for f in files_to_load():
      spinner.next(text="Loading %s" %f) # or .step(), or .tick(), or…
      do_load_file(f)
  ```
  This can (as far as I understand) be achieved with .frame() but isn't as concise as the above. Possibly don't render new frame more often than interval.