(Binary Analysis) IntegerOps improvements

* Added documentation to some old functions where it was missing.

* Added new variants of some functions in order to avoid needing
  to use template arguments in cases where the operation is useful
  but we don't know the argument at compile time.

(cherry picked from commit a77ca75cc0fea3836a15ff8c8e61504ea2e4673e)
(FormatRestorer) Added include-once protection around header file

(cherry picked from commit 7a4a0d59e74650e8c4e8352ea0a38d37c04fcf1f)
(Binary Analysis) Added non-template implementation of some instruction semantics

This is experimental and not quite working yet.  The basic goal is to
remove all class templates and member function templates from the
instruction semantics layers and replace them with abstract classes and
virtual functions.  See the README for details.

(cherry picked from commit d05e2ec7a7b1d74370c56b97747d554a4400626d)
(Binary Analysis) Moved register dictionary from RISC operators to Dispatcher

(cherry picked from commit 98a41253eddbaf9f35f28da98315f78f45a68b58)
(Binary Analysis) Combined various instruction semantics exceptions

(cherry picked from commit 5587e7ab204645b0ca1309fb9967515a59747d9e)
(Binary Analysis) More work on the binary instruction semantics redesign

* Added register read/write to BaseSemantics

* Combined various exception classes

(cherry picked from commit 4e4ebfdfa780a0e53b22cf24fd51b33a5d4ffa67)
(Binary Analysis) Instruction semantics optimizations

Register descriptors are cached in the dispatcher.  This replicates
the same optimization from the old design.

(cherry picked from commit 712db064fcf94b4c2089bebd9c922e670a6015da)
(Binary Analysis) Using custom-smart pointers for semantic values

Using or own custom implementation of boost::shared_ptr gives
a 38% increase in speed.

(cherry picked from commit c9931a0ccedfc384d55458f69d0a1af41d3a69df)
(Binary Analysis) Optimizations for binary instruction semantics

* Added a custom allocator for semantic values.  This increases
  the speed by about 30%.

(cherry picked from commit 12149a22bdab3e1a621b6de8831ae210e65029fb)
(Binary Analysis) More optimizations for instruction semantics

* Hand-inlining of Allocator::which_freelist() results in 3%
  improvement

(cherry picked from commit 0042a9060232169d560d1b093cc4b959ca28f71f)
(Binary Analysis) Optimizations for instructions semantics

* Move EIP update from base class to DispatcherX86 where it should
  have been in the first place. Improved speed by 20%.

(cherry picked from commit 6384bab75fd83294e230f2e821544c0e22c45b51)
(Binary Analysis) More work on the new binary instruction semantics API

* Performance improvements
* More documentation
* SymbolicSemantics converted to new API

(cherry picked from commit 93ff559f8f1adc0226be61939e59ad790fed84f7)
(Binary Analysis) Performance testing for new binary instruction semantics API

(cherry picked from commit 3bfb2ad44cfc4763d90ae3f8def8dffb0fde0423)
(Binary Analysis) Added more documentation for the new instruction semantics API

(cherry picked from commit 711779a23aab06f530f302c3eabcdac46931f79c)
(Binary Analysis) More documentation for symbolic def-use

(cherry picked from commit b2ca69463f6df23a88853b7b5f4188e0712029fb)
(Binary Analysis) Moved some function definitions for SymbolicSemantics

A few class methods that are more than a couple lines and not on a hot
path have been moved from the header file into a .C file.

(cherry picked from commit dc5f9ce5492f264ff8f6e9c12ff3d3fa9768c1cc)
(Binary Analysis) Moved IntervalSemantics to the new API

(cherry picked from commit 69900cb45e2a0d47375201152df98aa77b7ffea8)
(Binary Analysis) Added a MultiSemantics domain to the new API
(Binary Analysis) Reconfigured semantic tests in preparation for new API
(Binary Analysis) Changed output format for PartialSymbolicSemantics

The old API output format changed so that, like the other semantic
domains, it indicates the width of the ValueType being printed.