extract common code from dps.py into dpslib.py

Support alternate implementations of search like multiprocessor
branch-and-bound and genetic algorithm by separating the search code
from the representation of spells and cast histories.
Initial commit of multiprocessor branch-and-bound search.
Initial commit of genetic algorithm search.
add new tests