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).
My preference would be to have `clone` actually make an exact duplicate, and then have a method that would let you add a column to the end of a `Board`. Seems cleaner.