Added new guide providers

1) WeightedGuideProvider weighs the gbest and pbest.
2) An AlternateCrossoverGuideProvider which applies discrete crossover to two components e.g. gbest and pbest, gbest and pos, pbest and pos, etc
3) SelectionGuideProvider which uses a selection recipe (Roulette wheel, tournament, etc) to select a particle. A component is then extracted from the particle
(pbest, pos...). This can be done perDimension or perEntity.