cython BasePotential manages c++ potential via shared_ptr

this makes memory management much safer
use shared_ptr in the cython optimizers
fix coding style issues
the optimizers now accept shared pointers to BasePotential
SimplePairwiseNeighborList now uses shared pointers
CombinedPotential now uses shared_ptr
periodic_distance now accepts Array<double> instead of double *
Merge pull request #48 from pele-python/cython_shared_ptr

shared ptr in cython