Serialize cluster state version as a VInt; defer to elasticsearch on version compatibility

Use elasticsearch Version class to write version as a VInt rather
than serializing partial version as string (full version is needed for
reliably reading state metadata; change upcoming.) Use version class
to determine compatibility.

Note: this change is backwards-compatible for state reads but not writes. For rolling upgrades
from versions of plugin prior to this master must be upgraded last, but that was already
required for anything greater than a revision upgrade due to overzealous version checking
pre commit 92c7f5.
Use correct version when deserializing cluster state

Read state using the Elasticsearch version the state was written with rather than
defaulting to current version. Without this state deserialization can fail despite
version compatibility, as some classes depend on StreamInput.version to determine
how to read the input (see for example version checks in MappingMetaData hit by new
unit test.)