Managing MenuShell via unique_ptr
Using piecewise_construct for emplace where needed

For std::map::emplace, better forwarding is achieved by using the
std::pair piecewise_construct constructor. This allows even std::map
objects to be allocated with less temporary object creations, as the
pair can be created in-place with its parameters forwarded to the map
for construction.
Searched through instances of std::map::emplace as well as
std::map::operator[] and made the replacement where it felt appropriate.