Store command actions in variables (no subclass)

This strategy is borrowed from the SFML book. Subclass implementation runs
into problems at the high-level IGameObject interface: More often than
not, more functionality is needed than what a high-level class can offer.

Instead, store functions in variables that support high-level interface.
Use template function MakeAction to hide functionality for a derived
GameObject class behind a base class interface.

A mechanism will need to be implemented to simulate a kind of RTTI. At
current state, Command objects are liable to unsafe casts.