Refactor position-evaluated selection keyword handling

Now the keywords themselves only return one value per position, not one
value per atom.  The expansion to atoms is instead done by the caller in
evaluate.cpp.  This makes it easier to reuse the methods for
implementing syntax like "z of ...", where the expansion is not
appropriate.

Also, add an additional unit test for code around this path.

Change-Id: Ida74244fe1c76eaf89c3d2e1ca9b6f6784b0476d