Make ResourceVersion internally a string instead of uint64

In v1beta3 we decided to make the public, external ResourceVersion an opaque string so that we can eventually support other stores.  This change in preparation for v1beta3 rewires the internal version
to string, but leaves v1beta1/2 as uint64.

As a consequence of this change, clients must treat tokens as opaque and pass them back to the watch interface unchanged.  Therefore the watch interface must start watching at "resourceVersion" + 1. This
simplifies client behavior.

Extracted from #1600
Why not just change ObjectReference to use string everywhere? It's not actually fully plumbed in yet so you won't be breaking anything.