Calculate hotkey id for a menu item in one spot instead of three.
Make wmi_container a container of pointers instead of items.

This is preparation for converting those pointers to smart pointers;
while it is easy to get a pointer from an object, it is not so easy
to get a smart pointer.
Adapt wmi_container to use smart pointers.

This may make it possible to remove the explicit buffering of
WML menu item changes, but that is for a future commit.
With shared pointers, we no longer need a deep copy.

Technically, this is a behavior change, since copies and assignments
will now share data, causing changes in one copy to affect the other.
However, the logic is that only one wmi_container is active at a time;
the copies and assignments are used to transfer data between scenarios
and to/from saves. So shallow copies are permissable (and slightly
reduce memory consumption).