Issue/1293 consistent button states

Refs #1855 
Closes #1293 
This is a tidied up PR for @jstart's work on updating button states. I created a fresh branch from develop and cherry-picked his commits, along with some minor code style cleanup.  Props to @jstart for the effort. 

I commented on #1293 that we might want to discard the animation but I've changed my mind after looking more closely at the default button behavior. I think what's here is a good fit.