Renamed get(SharedPtr) to getRawPointer(SharedPtr)

Also allow assignment of Nothing() to any pointer. These are the same
operation:

  SharedPointer<MyClass> ptr;
  ...
  clear(ptr)
  ptr = SharedPointer<MyClass>();
  ptr = Nothing();
Added destructor for Optional

The Optional destructor calls the destructor for any object
that is contained, else no constructor is called.
More diagnostics for pool allocators
SmallObject can return a reference to the pool allocator
Added class method to construct a whole interval
Certain IntervalMap operations are no-ops when the interval is empty
Added a bunch of IntervalSet methods and operators