gpu perft optimizations

- allocate memory only once per thread block
- launch grid only once per thread block
- for interior nodes calculate number of moves before generating them
(saves lot of memory)