Base stone refactoring

Refactored stone base classes to reduce code duplication that may result in disparity between behavior

This also makes it easier to add new types in the future, although I don't actually expect that to happen :)

There's a lot of refactoring I'd like to do in small pieces, with permission. This is a sample of the types of things I would be doing to start with.