implements unique algorithm

`Sentinel<S, I>()` is unnecessary here. `ForwardIterator<I, S>()` already tests that.