Create wrapper to put blocking widgets in a coroutine

Create a new widget base class, ThreadPoolText, which wraps blocking functions inside of a coroutine.  Then, use said class to update the mpd widget to be much more responsive to changes.  Rather than polling, we can simply use the idle command to wait for changes to mpd's status and act accordingly.

This solves a couple of TODO's that were mentioned in the mpd widget source.