Inconsistent comparison of value() and outerValue()

There were mixed up internal comparisons between value() and outerValue() when determining if "onvaluechange" should be fired. I split up the private currentValue and made it more obviously private. There is now some weirdness in how outerValue() calls itself to store the currentOuterValue, but I wanted the mixed comparisons fixed first.

internal v. external is useful for if you want to capture actual user input. This happens in situations where if you set value() in response to the input, you don't want to create a loop of value change events.

Also fixed a gap where we might miss changes between the last poll + blur.

I didn't mean to make this all one pull request, but I'm not sure how to pick a single commit now that I've pushed them all to my fork.