Start fanning out request handlers.
Finish extracting request methods.
Use data_str and type_str on PlaylistItem.
Use Results in the playlist API and request handler.

This allows error messages to be sent to the client easily.
Fix up test suite.
Add indexless enqueue and comments.
Allow text items to be added.
Make the tests pass again.
Add (failing) selection tests.
Disallow selecting text.
Add selection state booleans.
Implement eject.
Extract method eject_downstream.
Remove empty select response; can be inferred from STAT.
Move eject logic into response listener.
Announce empty selection.
Handle quit request.
Use select! instead of loops-with-stops.
Move playlist code into models module.
Implement downstream state model.