Implement new C++ data structure to power algorithms

WIP

Starts #216.
Obsoletes https://github.com/numenta/nupic.core/pull/217.
Initially, client will call these methods. Then, we can profile and merge together many calls into one optimized call at that point. However I would like to start with the most flexible approach first.

We can't have `Synapse&` be the return type here because this function is creating a synapse, so if it were to return a reference, the synapse would be out of scope and deallocated before the caller could use it.