BC-BREAKING CHANGE: Refactor grant types

This PR addresses some of the issues in issue #113 by cleaning up the grant type interface and consolidating extra methods to remove complexity.  All tests pass, but this will break backwards compatibility, as the `GrantType` interface is changed