Implement foundations of strategic restriction concept.

This provides initial support for strategic restrictions in C++.
A strategic restriction is created by the operation Restrict()
on a StrategySupport.  This is a copy of the game, which can then be
manipulated as any other strategic-representation game.

Mappings of objects defined in or on restricted games, back to the
corresponding object in the original game, can be obtained by
calls to Unrestrict().