Implement new C++ data structure to power algorithms

WIP

Starts #216.
Obsoletes https://github.com/numenta/nupic.core/pull/217.
The memory usage of the system is likely going to be dominated by this structure. As such, it is worth thinking through each item here. Can we use UInt32 instead of UInt? Can we use Real32 instead of Real? Or can we even use shorts or bytes for permanence? Finally, do we really really need to have Segment * in there? This will require an additional 64 bits per synapse.