Separate RuleError from GameError and add BaseGameError.

Rule violations throw RuleError, actual game errors throw GameError.