make use of the movelist, preallocate kernel memory and many more changes

- generate moves instead of boards, and in the leaves, let the kernel
make the move first and then generate moves for the resulting board.
- generating moves is much faster (~10X) than generating boards, and
makeMoves hardly makes any difference to the countMoves kernel.
- cudaMalloc/cudaFree was causing weird issues that felt like memory
leak but I couldn't find any memory leak. cuda-memcheck also didin't
work :-/
-- To avoid this problem we now pre-allocate 1 GB of memory and serve
memory requests from this memory (using an atomic add). Free is not
implemented - all memory is freed when the parallel kernel ends.
-- The pre-allocated memory stuff was also causing weird issues (race
condition?) that went away by aligning/padding up memory requests to 4
KB.
- performance is now approx: 20 BNps  in best case and 11 BNps for
starting position.