(Support) Added Range::erase()

Removes part of a range and returns the remaining parts as a vector
containing zero, one, or two ranges.
(Binary Analysis) Added RegisterDictionary capabilities

* size() returns the number of entries in a dictionary.

* get_descriptors() is like get_entries() but only returns
  the RegisterDescriptor part of each definition in the
  dictionary.

* SortBySize functor to sort register descriptors in ascending
  or descending order by size. Can be used with std::sort()

* filter_nonoverlapping() filters a register descriptor list
  so the result contains only non-overlapping descriptors.

* get_largest_registers() returns a set of non-overlapping
  registers which are the largest registers.  This is a
  one-liner in terms of the above functions.

* get_smallest_registers() returns a set of non-overlapping
  registers which are the smallest registers. Also a one-liner.
(Binary Analysis) Finished implementing clone() methods for semantics
(Binary Analysis) Added a framework for testing instruction semantics

* Framework is the BinaryAnalysis::InstructionSemantics2::TestSemantics class template.

* Framework is exercised by tests/roseTests/binaryTests/semantics.C for NullSemantics,
  IntervalSemantics, SymbolicSemantics, and PartialSymbolicSemantics.
(Binary Analysis) Test/demo for subclassing Symbolic semantics classes