massive cleanup

add support for private messages

change the api for commands to be more extensible
more cleanup
cleanup
more cleanup
the big one