Position#show prints the point.

Can't ensure range position points are meaningful when we never
see them. To limit noise, only print the point when it != start.

  [x:y]    // point=x, start=x, end=y
  [p/x:y]  // point=p, start=x, end=y

I'm open to a different syntax.

Also prints NoPosition as [X] rather than [NoPosition] because
noise is for construction workers and attenders of rock concerts.

Some range position and parser tests are included so we can see
the checkfile change when the forthcoming fix happens (either an
error message improvement or a positional one.)
SI-7854, SI-6768 better parsing/positioning in parser

The parser hole I found while working on the generated positions
serves as the umbrella for a host of improvements. Upgraded
positions assigned during some specific challenging situations mostly
involving the creation of synthetic trees, e.g. for comprehensions
and closures. While doing so improved some error messages.

Eliminated some of the most glaring duplication in the parser.
It's written like there is some payoff associated with being
spectacularly imperative. Not so far.
Merge pull request #2957 from paulp/pr/parser-improvements

Parser and position improvements.