Split RunKernel in two to improve profiling.
Exit cleanly if no opencl devices
Make FIFO block instead of die
Make samplemanager a regular, rather than singleton object.
Move particle generation out of samplemanager.

This will help make it async, ensuring no accesses to things we shouldn't be
accessing.
Clean up timing code in main
Make samplemanager less verbose
Make particle generation async.

Particle generation is now truly on-the-fly.  Caveats:
 * Information printouts aren't great.  Progress will go up (as particles are
   created), then down (as they're processed).
 * Buffer sizes haven't been tweaked.  So we're not really saving memory.
 * Without the above, we still can't support hundred-million particle tests.
Improve progress message

Now counts up, as desired, prints progress as percent, as well as cumulative
average of the speed.
Add TODO list, mainly with optimization ideas
Add a sample progress message (and kill the horrible oclenv msg)
Shrink the FIFO size.

Used particles per side of all GPUs combined, which seems safe.  Could
possibly try smaller.