Flatten tuples to right in pretty printer

* 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.

Fixes #881.
Improve pretty-printing of function applications

* 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 #882.
Merge pull request #895 from david-christiansen/semantic-pprint

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