Changed type of addCommit to enforce gaurantees
Major type class/monad dependency changes

From fun in the afternoon with Norman

Changed code so world writers and working tree writers returned
extenders or writers of the monad next in the hierarchy. This
simplifies the instance declarations immensly and makes contracts easier.

Also minor changes by retyping Strings to FilePaths.