WIP: Tokenize MPD requests instead of regexp per command variant

Fixes #591 and #592. The tokenizer still need more correct error handling, and there is still quite a bit of work converting everything. `*args` support is needed as an escape hatch for more creative commands like `move [{FROM} | {START:END}] {TO}` and searches. `*args` may not be combined with regular args or keyword args due to precedence rules when binding `func(*args)`.