Improve the performance of MoveList

MoveList is designed to be used during move generation.
To keep things efficient its data store is kept static. As a result
it saves on the processing time necessary to resize the memory.
It also has the side-effect of failing when more than the
maximum number of moves are stored. At the moment the data
structure can store up to 40 moves. This will need to be adjusted
based on move generation statistics.