Improve the handling of properties in Neo Core

This overhauls some of the property handling in Neo core.  Specifically:

Added the sampling_period property to Spike to make it consistent with SpikeTrain
Made the sampling_period property settable
Made sure properties properly handled the case where one of the attributes it uses is None
Used decorators for properties