pass callback to action instead of passing the component

This change accomplishes 2 things...
 1. allows use to just call the `callback(promise)` instead of calling `button.set('promise', promise)`
 1. blocks the action from modifying other properties on the `button`.