Removal of Topology and PopulationBasedAlgorithm

Topology was a fairly poor abstraction as the neighbourhood calculation
was the only valuable contribution it provided. It was essentially
List<E> + neighbourhood function. As a result, the neighbourhood functions
have been extracted into the Topologies class and a new function alias
has been created, namely: Neighbourhood<E>. All SinglePopulationBasedAlgorithms
now have the notion of a neighbourhood function, which can be used to
determine the neighbourhood of a specific element and defaults to the
GBest topology to keep the behaviour of the old code.

PopulationBasedAlgorithm was another broken abstraction which provided no
real benefit. It merely created confusion, especially in the cases where
multiple (sub)swarms where maintained. This has been removed and now
a clear distinction between Single- and MultiPopulationBasedAlgorithms
can be found in the code.

Additionally:
* Added support for static neighbourhood functions in simulator.

* Introduced HasTopology<E>

* Remove Function and replace with fj.F

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