Feature/longest increasing subsequence

A new algorithm: longest increasing subsequence that permits as well to find the longest decreasing/non-increasing/non-decreasing or differently ordered subsequence by defining comparison predicate. I have added tests for it using iterators, ranges, pointers and object's `operator()`.

There are 2 functionalities actually: computing length (function `longest_increasing_subsequence_length` or method `longest_increasing_subsequence::compute_length`) and retrieving the subsequence (function `longest_increasing_subsequence_search` or `longest_increasing_subsequence::operator()`).
There is also a creator function `make_longest_increasing_subsequence`.

There are 3 possibilities to retrieve the subsequence:
* through an output iterator as an argument
* returning a vector of values
* returning a vector of iterators (useful for big objects when there is no need for copy)
The two latter variants are chosen by giving a corresponding tag as an argument.

Documentation will come soon.