Flatten tuples to right in pretty printer + show infix ops properly

* Tuples are flattened to the right, just as the parser nests them to
  the right

* Almost-duplicate printing code for tuples and pair types is greatly
  simplified.

* Show infix operators properly even if they have a number of arguments
  that isn't 2
   * `snd . snd $ (1,2,3)` is now `(snd . snd) (1,2,3)` instead of
     `. snd snd (1,2,3)`
   * `(+) 4` is shown as `(+) 4`

* Show applications where all arguments are implicit without parens
  around them

Fixes #881, #882.