This issue is for planning (not implementing) some changes to Footprint's interface, including the following:
- make Footprint immutable
- create a separate SpanRegion class that holds Spans and provides geometric operators does not hold Peaks or a "region" bbox (Footprint would then hold one of these).
- many operations currently implemented as free functions should be moved to methods
- we should switch the container from vector<PTR(Span)> to simply vector<Span>, as Span is nonpolymorphic and at last as cheap to copy as a shared_ptr.
The output of this issue will be a set of header files that define the new interface, signed off by an SAT design review. Other issues will be responsible for implementing the new interface and fixing code broken by the change.