Smart Pointers support (see enhancement #194)

Basic smart pointers implementation.

I also added a version of NQueens using the smart pointer support and a basic unit test (which I am not totally sure if it is done correctly).
it's actually a bad idea to call `pointer` on a GlobalAddress when not on the correct core. For 2D addresses this isn't a problem, but for Linear it'll give you the wrong pointer, since it'll use this core's offset. For this reason, we typically try to avoid getting the pointer and then capturing it as you're doing here.

Why not just do:
~~~cpp
delegate::call(refMan, [](RefManager<T>& rm){ if (!rm->Decrement()) delete ref; });
~~~