Add Validation State Change Events

Broaden the idea of FieldHolder's OnCardValidListener to send a valid/invalid
event whenever the data set's overall valid state changes. That is, if the user
edits a field to make it no longer valid, fire an invalid event - and then don't
send another event until the data becomes valid.

- Add unit tests for the validation event propagation.
- Update example app to prevent tapping the "Save" button if the data's not valid
(and display when validation events happen).

Reviewers @cgould @galeng 
> For OpenTable use, this will support us disabling our "Next >" button whenever
> the data in the manual credit card entry form is not valid.
Another nitpick - when the success message is followed by an exclamation point, it always seems to me that the author is surprised it worked :-)