Broke out a common base class for the button model, see #59.