Introduce revision codes for split APKs.

Apps delivered as multiple split APKs must have identical package
names, version code, and signatures.  However, developers may want
to iterate quickly on a subset of splits without having to increment
the version code, which would require delivery of the entire app.

This change introduces "revision codes" which can vary between
split APKs belonging to the same app.  An install is valid as long
as the normal version code is identical across all splits.  Splits
can be added/removed to an app over time, but if a split is present
across an upgrade the revision code must not decrease.

Since system apps could have been updated with splits, only revert
to the built-in APKs if the version code is strictly greater than the
data version.  Also fix bug to enable inheriting from system apps
when adding splits.

Bug: 18481866
Change-Id: I34d8e14c141a8eb95c33ffe24b4e52d6af5c8260
diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java
index ad54912..78b9c18 100644
--- a/core/java/android/net/VpnService.java
+++ b/core/java/android/net/VpnService.java
@@ -296,9 +296,9 @@
      *
      * This method only needs to be called if the VPN has explicitly bound its underlying
      * communications channels — such as the socket(s) passed to {@link #protect(int)} —
-     * to a {@code Network} using APIs such as {@link Network#bindSocket} or {@link
-     * Network#bindDatagramSocket}. The VPN should call this method every time the set of {@code
-     * Network}s it is using changes.
+     * to a {@code Network} using APIs such as {@link Network#bindSocket(Socket)} or
+     * {@link Network#bindSocket(DatagramSocket)}. The VPN should call this method every time
+     * the set of {@code Network}s it is using changes.
      *
      * {@code networks} is one of the following:
      * <ul>