Add set_fitness kernel and transform step_* into kernels
Add manual work group size calculation

Since barriers only synchronize threads per work group, we need to
either arrange each world so it fits entirely into one work group, or
synchonize by calling each step_* at a time.