Moved type aliases to detail namespace.
Relaxed const-ness of FunctionOp. Before it would only accept functors with operator() const, which does not include those returned by std::bind.
Considering that any functor should represent a pure function, enforcing as much const-ness as possible seems like a good idea, but enabling bind is more important.
Added FoldByRef and IterateByRef to algorithms. Iteration func modifies current state by reference without copy and comparison. Downside: Comparison to previous value is no longer possible, so always assuming a change.