Add experimental tabulate() algorithm

This adds a tabulate() algorithm which fills a range with values
calculated from a function given each elements index.
Add sort_by_key() algorithm

This adds a new sort_by_key() algorithm which sorts a range
of values by a range of keys with a comparison operator.

For now this is only implemented by the serial insertion sort
algorithm. In the future it will be ported to the other sorting
algorithms (e.g. radix sort).
Add experimental sort_by_transform() algorithm

This adds a sort_by_transform() algorithm which sorts a sets of
values based on the value of a transform function.

For example, this can be used to sort a set of vectors by their
length (when used with the length<T>() function) or by a single
component (when used with the get<N>() function).