Refactor CGame and CGameRules

both classes have been abstracted into base classes and then cleaned,
refactored