Use std::make_shared<> to create shared pointer

Using std::make_shared<>[1] will safe one allocation compared
to std::make_shared<T>(new T(...)).

I use auto quite in most of the places just to keep the lines short. The actual type of the auto is quite clear from the make_shared<> template argument.

[1] http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared