Brought in Sébastien Rombauts's minimal shared_ptr implementation

* Depending on compiler, uses appropriate std::shared_ptr include
* If compiler doesn't have std::shared_ptr, uses this implementation
lib: switched templates from std::shared_ptr to pkmn::shared_ptr
cmake: no automatic compiler check for std::shared_ptr support

* Added CMake option to use boost::shared_ptr instead of std::shared_ptr
Removed final uses of std::shared_ptr