Python records where OpenMM is installed, so it doesn't need to be specified with environment variables at runtime
Lots of code cleanup related to constraints in the reference platform
Merge pull request #164 from peastman/master

Lots of code cleanup related to constraints in the reference platform
Made identification of plugin directory slightly more robust
Merge pull request #159 from peastman/install

Python records where OpenMM is installed, so it doesn't need to be specified with environment variables at runtime
Early beginnings of creating an optimized CPU platform
Optimizations to neighbor list construction
More optimizations to neighborlist construction, including SSE intrinsics
Neighborlist construction is multithreaded.
Separated hardware query functions into a separate file.  CPU platform checks for the correct hardware.
Began creating optimized implementation of direct space nonbonded calculation
Continuing to optimize CPU nonbonded routines
PME works correctly in CPU platform
Use optimized PME implementation when available
Direct space nonbonded is multithreaded
Do not rebuild the neighbor list every time step
Fixed a race condition
Corrected minor bug in GBneck screening parameter assignment. The existing logic
was:

if symbl[0] == ('c' or 'C'):
   ...do stuff...

This logic will match only 'c' as ('c' or 'C') evaluates to 'c' while
('c' and 'C') evaluates to 'C':

>>> 'c' or 'C'
'c'
>>> 'C' == ('c' or 'C')
False

The correct logic is either

if symbl[0].upper() == 'C':
   ...do stuff...

or

if symbl[0] in ('C', 'c'):
   ...do stuff...

(Alternatives can be [ if symbl[0] in 'cC' ] or [ if symbl[0].lower() == 'c'])
Add a comment to clarify that calling setReactionFieldDielectric on force
instead of gb is intentional.
Merge pull request #165 from swails/master

correct minor bug in GBn screening parameter determination.