implements unique algorithm

This looks extremely fishy to me. The loop condition is `while(++begin != end)`, so we break when `begin == end`. Then we try to increment once more, and boom.

Please don't try to implement the algorithms yourself. I don't trust myself to do that. Please take Howard's from libc++ and edit it as needs be, giving credit. Please also take the test cases from libc++. Finally, please see N3351 for the concepts for each algorithm. The concepts for `unique` are given in B.3.9. FWIW, I think we want `IndirectlyMovable` instead of `IndirectlyCopyable`, but that requires thought.

[*] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3351.pdf