Add commit -a option and changed dispatch

Future commands can simply take in a list of files and we can
bind the files from the IO monad into these functions.

Added readRepo' as an alternative execution of a WR
Using more general type class for readers/writers

Instead of needing to promote, can just let the type class do the work.
In Main only need to use the type classes.
First attempt at checkout' using world readers
Other implementation of checkout, uses more monads

Need the join operator otherwise its an IO(IO ())