GPUArray is now pseudo-thread safe (in debug mode), simplified bond table construction for ghosts

- GPUArray has two new access modes: readwrite_shared and overwrite_shared
- in debug mode, it enforces the access policies using assertions in a thread-safe way
- made bond list construction thread-safe
- made Compute::compute() thread-safe (e.g. for neighbor lists construction)
- bond list construction is unified (ghosts and non-ghosts bonded particles are processed
  in same kernel)
Accelerated bond table construction

- eliminated reduction kernel for finding maximum bond number
  in favor of iterative bond table growth
Made BondData thread-aware
Enabled number of threads command line option, and made NeighborListGPU streams aware
Fixed small bug when not supplying the command line option
Fixed environment corruption issue
Fixed some potential issues with MPI initialization
Fixed condition for setting environment variables in ExecutionConfiguration
Enabled streams in NeighborList::updateExList
Made CellList thread-aware
Thread-awareness of NeighborListGPU::distanceCheck()
this is supposed to be executed in the main thread
Revert "Thread-awareness of NeighborListGPU::distanceCheck()"

This reverts commit 0857ae5f0338c175f130fe0ae8c3793ac1669160.
Converted conditions flags in NeighborList and CellList to GPUFlags

- this makes them streams-aware
- also fixed bug in GPUFlags
Actually, it is useful for single-GPU runs

Revert "this is supposed to be executed in the main thread"

This reverts commit c5bf9083254a0870b0732a9505cfd9cfa95ad85a.
Made NeighborList::distanceCheck() completely thread-aware
Synchronization using cudaEvents instead of cudaStreamSynchronize
Made cudaEvents reusable (on a per-thread basis)
in BondData, made memset async
Added debug message
Removed textures from PairPotentialGPU.cuh, enabled setting of cache configuration for pair forces