Replace the explicit call to Range::erase()

This call is replaced by a call to a free function range::erase() implemented using std::copy() and range::resize() which uses geometry::traits::resize<>.

This PR also adds convenient range::resize() range::push_back() and range::clear() using mutable range traits.

However we could think about rewriting this algorithm to not use erase at all. Is it required to remove elements from the beginning of the Range or could spikes/duplicates be handled by the removal of elements from the end?

And an optimization is probably possible:
1. first search for the first non-spike point,
2. remove some number of elements from the beginning