This change is almost perfectly compatible with the existing code, except it's a little shorter because it uses a list of a available formatters that must implement a `command.Formatter` interface. Also added some basic formatting tests.