Support pretty-printing infix constructors

The exact ``chain'' of infix constructors is preserved to be able to
print parenthesis correctly.
Pretty-print Ratios so they can be Read back
Add a test of parsed and Reading back a data type

For some reason read . ppShow = id is incredibly slow and runs out of
memory. Is the derived parser so inefficient?
Update the pretty printer to avoid too long lines

This update changes this

    Deriv
      { derivContext = [ ( "f"
                         , Exists
                             "a" (
                             Exists
                               "b" (
                               Exists
                                 "c" (
                                 ((TVar
                                     True
                                     2 :+:
                                     TVar
                                       True
                                       1) :+:
                                    TVar
                                      True
                                      0) :*:
                                   (TVar
                                      False
                                      2 :&:
                                      (TVar
                                         False
                                         1 :&:
                                         TVar
                                           False
                                           0)) ) ) )
                         )
                       ]
        }

into this:

    Deriv
      , derivContext =
          [ ( "f"
            , Exists
                "a" (
                  Exists
                    "b" (
                      Exists
                        "c" (
                          ((TVar True 2 :+: TVar True 1) :+: TVar True 0) :*:
                            (TVar False 2 :&: (TVar False 1 :&: TVar False 0)) ) ) )
            )
          ]
      }

Futhermore, lists are not always printed as

    [ 0
    , 1
    ]

Instead, they can be printed as

    [ 0 , 1 ]

This is of course subjective, but I prefer this.
Split test data type into two parts

I think the reason is that derived Read instances are exponential in the
size of the input string when using infix constructors.
Merge pull request #6 from danr/master

Parse infix constructors, add a test and fix Ratio pretty printing