game: Made shared_ptrs into unique_ptr and added an implementation of make_unique

Some objects that were represented in the engine were held in shared_ptrs, despite having a single owner and a well-defined lifetime. I moved them to unique_ptrs so that it was clear that they had a single owner, and so that it was obvious when they were released. I also added an implementation of make_unique from c++14 to facilitate the use of unique_ptrs