Simplify abstract-drawing backend

As discussed, this contains the changes to:

          - Renamed Backend/Utils.hs -> Backend/Impl.hs
          - Moved content of Backend.hs -> Backend/Impl.hs
          - Made Backend.hs backend a clean API view on Backend/Impl.hs

However it also contains a significant change to the "deep embedded" backend. I experimented with removing the Monad transformer stack, and managing the environment within the operational program. This way:

         -  the environment is specific to each backend
         -  there's quite a bit less code and it's simpler (I think)
         -  you don't need any language extensions

Let me know what you think.