Detect () and handle its name specially

mkName "GHC.Tuple.()" won't match (which is what would happen otherwise)
Add a test case which exercises nested patterns, list patterns, unit pattern, and as patterns