Merged requested to merge feature/engine-pool into 3.x
A C++ implementation of a thread pool that can allocate and run any number of Pulse engines. This engine pool is available for other languages to utilize, but only python support has been implemented and tested. Having this managment on the native side avoid issues created by managing threads in python, specifically this avoids having to deal with the global interpreter lock (GIL) in python. This infrastructure should help integration of Pulse into python based ML networks.
This implementation only supports upfront allocation of N engines. It does not support dynamically adding new engines once these engines have been constructed. (Future support for dynamic allocation in the future, as well as C# and Java)