Implement unrestriction framework on remaining game objects.

This implements the m_unrestricted member as the Unrestrict() operations
on all game element objects.

As restriction is only implemented for strategic games at present, these
facilities are not yet exercised, but are set up for when agent
restrictions are put in place.

In addition, calling Unrestrict() on an object which is not a restriction
now raises an UndefinedException(), instead of returning a null pointer.