Partial rewrite of particle migration

The routines to retrieve/add/remove particles from the local particle data are
now provided by ParticleData itself. Particles are staged to be packed
into a buffer by setting rtag=STAGED, and are marked for removal by setting
rtag=NOT_LOCAL.

Currently only the base class version is functional.
Continued rewrite of particle migration - GPU OK
Rewrote bond communication on CPU

Bonds are marked for sending and removal by using rtags,
similar to the new ParticleData methods
GPU bond communication - OK
Okay, I hadn't tested the GPU bond addition/removal

This is fixed now
Enabled lazy rebuilding of group index lists

Because notifyParticleSort() may now be called several times during
a communication step, this prevents unnecessary index rebuilds
Enabled data access for setting position in MPI

refs #2559
fixed potential debug mode error

refs #2559
Move bonds with particles

Added signal to ParticleData when a particle moves, so that
the bonds can move with it.
Adapted unit test for communication

refs #2559
Fixed two subtle bugs in thrust code (multi-GPU)

and other minor changes (debug messages)
Added profiling statements
Use cached allocator for thrust code

To avoid unnecessary internal memory allocations when thrust kernels
are called, we cache memory allocs as per the thrust examples.

+ other small optimizations (mapped pinned memory for send/recv buffers)
Use std::remove_copy_if instead of boost::algorithm::copy_if for compatibility
Set limit on memory allocation cache
Performance optimizations

Notably, more compact particle addition/migration.

Bond communication does not yet work.
rtag computation on the fly
Clean up a bit
Optimized thrust memory caching
Switched to direct communication pattern

Gives a 1-2% boost for 1d (probably more for 2d and 3d decompositions)