Have GeometricDet::bounds() return std::unique_ptr<Bounds>

Before GeometricDet::bounds() returned a pointer to a new'ed Bounds.
However, returning a non-const pointer from a const function can make
the static analyzer think there is a threading problem. By switching
to returning a std::unique_ptr<Bounds> by value, the static analyzer
no longer complains and it makes callers of the routine take explicit
ownership of the pointer (which they should have done all along).
There were only minor changes to other code to deal with this change.
Merge pull request #2831 from Dr15Jones/makeGeometricDetThreadSafe2

Geometry Tracker -- Have GeometricDet::bounds() return std::unique_ptr<Bounds>