SemElemSet subsumption: refactoring prep

This commit is just a minor refactoring that is dumb except that
it will make the following diff easier to read.
SemElemSet subsumption: return elements to keep, but fake

This commit changes the "does this subsume that?" functions to return
a pair of the items which should continue living, but they are not
really used fully correctly now.
SemElemSet subsumption: renaming

This renames functions so that they make more sense. One side effect of
this generalization is that the function names are now WAY more intelligable
than I could get them before.
SemElemSet subsumption: honor returned elements

These changes may be what is necessary for the generalization to work.
However, this functionality is not tested at the moment; that will come
soon.
SemElemSet subsumption: remove temporary restriction

This changes the enum that used to specify behavior (keep all nonduplicates/keep minimal/keep maximal) to a callback-based version that does not require that the kept element be one of the original ones.

The potential new functionality (returning different elements) is not tested yet.
SemElemSet subsumption: rename identifiers

Rename SemElemSet::SubsumeKeep* to just SemElemSet::Keep*. The original names were mostly because they were originally in the surrounding namespace, so I "namespaced" them a bit more with their name. Now that they are in the SemElemSet class as static memebers, this is no longer necessary.
Add a hash overload to SemElemPair
Undef a temporary #define
SemElemSet::hash() correctly tracked during extend/combine

This wasn't the case before. When add_element_if_appropriate was called during extend and combine, it did not update the hash when elements were added or removed from the current set. This commit fixes that.
SemElemSet subsumption: add tests of new mechanisms

I don't have the BDD version that I need for XFAs, but the SemElemSet side of things is now done.
Improve XFA tests: test order dependence

The test that clears the wali key space was messing with things because this test was using keys from before and after that watershed
Disable three tests that clear the keyspace

These kill other tests if they run in the wrong order
Better printing of SemElemSets; include comma

It wasn't printing them (or a space between elements) before because of a silly bug
Introduce new variant of WFA::compute"All"ReachingWeights

You can now pass in a SemElemSet subsumption function and it will compute all elements that are not subsumed by that metric.
ProgramBddContext::Assume bug fix for different voc sizes

Must quantify out the regSize from bdd before conjucting the two operands.
Constants take the size of the largest variable in the vocabulary. This would
lead to Assume returning false. Now, the semantics are the equate bits equal to
the smaller of the two operands to Assume, and leave the higher bits
unconstrained.
Add unit test for last commit: bug fix in ProgramBddContext::Assume
Merge branch 'master' of https://github.com/WaliDev/WALi-OpenNWA
Fix broken unit test from an earlier commit
Make ASCII art comment prettier :-)
Add new WFA::alphabet() function (with test)

Returns the set of non-epsilon symbols that appear on edges