Adjust number of threads per collection.

This is a minor performance optimization that uses
64 threads per collection, rather than 1024. This
is slightly faster for typical cases.
Massive improvements to performance of groups.

Previously, each group was handled by a single thread. This commit
changes that to use one thread block per group. Each thread block
is a single warp of 32 threads. All threads help to lead the indices
and energies into shared memory. Then a single thread runs the quick
select algorithm to find the correct energy cutoff. Then all threads
help to activate the appropriate restraints.

This still needs further improvement. Currently, OpenMM launches a
maximum of 6 thread blocks per SM. This limits this kernel to
6x32 = 192 threads per SM, which is very low. The fix will be to use
"warp programming", where each thread block computes multiple groups
in parallel, where each warp computes a single group.