Initial DE draft.

This is the initial DE algorithm definition. The algorithm is nothing
more than a piecewise application of a function to a single entity
within a collection of entities. The iteration scheme (either
synchronous or asynchronous) are responsible for creating the new
population and then potentially selecting the new population from both
old and new.

Some thought is still needed around this as the iteration schemes are
really algorithm independent - perhaps the selection of the new
population should be a function that is composed onto the iteration
function where the new population is created. Perhaps something along
the lines of a Reducer? If a Reducer is used, there must be a monoid
structure available.

Signed-off-by: Gary Pamparà <gpampara@gmail.com>