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