Update DE code to have all parameters provided via lenses.

This is the initial set of changes needed to make the algorithm have a
parameter type that can be changed, based on the usage thereof. All the
code related to reading (and potentially the updating) of the parameter
state is provided through Lens instances.

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Initial PSO related changes

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Total function: RVar#choices

If the requested number of elements to select is more than what can be
selected from the provided list, then return a None value. As a result
of this, the function is now total (in my mind) as it will always
terminate and the resulting value is logical by either working or not
working without any "magic".

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Further changes -> iteration continues

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