KeyedSemElemSet: create PositionKey class

This is a "SemElem" (but not really) that will often be useful (hopefully) as a key type for the future KeyedSemElemSet class.

Tests included.
KeyedSemElemSet: my PositionKey class needs a one() function after all
KeyedSemElemSet: add dummy impls of functions and comment
KeyedSemElemSet: change tests to use refptrs instead of values
KeyedSemElemSet: make it store a backing set, add a couple accessors
KeyedSemElemSet: add one() and zero() functions

The one() function includes the ability to pass an empty set to the constructor and still be able to construct a one (but this bit isn't tested)
KeyedSemElemSet: add extend function (no duplicates allowed yet)
KeyedSemElemSet: implement the equal() function
KeyedSemElemSet: change to use unordered_multimap; better extend tests
KeyedSemElemSet: made combine
KeyedSemElemSet: change from multimap to map to sets

This is because a multimap can contain pairs with duplicate keys AND VALUES (e.g. {("a", 1), ("a", 1), ("a", 2)} -- the second ("a",1) is undesirable).