Complete rewrite of printReprToStream.

* Applies depth and width rules dictated by the properties.
* Prints short lists with list notation.
* Prints # tuples with infix # notation.
* Uses parentheses where needed with # and | notations.
* Quote atoms and unique names when needed.