Extracted ICodedInputStream interface
diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs
index 757ecff..5bb6df0 100644
--- a/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs
+++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs
@@ -870,10 +870,10 @@
     public static SpeedMessage1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

       return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

     }

-    public static SpeedMessage1 ParseFrom(pb::CodedInputStream input) {

+    public static SpeedMessage1 ParseFrom(pb::ICodedInputStream input) {

       return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

     }

-    public static SpeedMessage1 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+    public static SpeedMessage1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

     public static Builder CreateBuilder() { return new Builder(); }

@@ -1063,11 +1063,11 @@
         return this;

       }

       

-      public override Builder MergeFrom(pb::CodedInputStream input) {

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

         return MergeFrom(input, pb::ExtensionRegistry.Empty);

       }

       

-      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

         uint tag;

         string field_name;

@@ -2447,10 +2447,10 @@
     public static SpeedMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

       return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

     }

-    public static SpeedMessage1SubMessage ParseFrom(pb::CodedInputStream input) {

+    public static SpeedMessage1SubMessage ParseFrom(pb::ICodedInputStream input) {

       return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

     }

-    public static SpeedMessage1SubMessage ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+    public static SpeedMessage1SubMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

     public static Builder CreateBuilder() { return new Builder(); }

@@ -2576,11 +2576,11 @@
         return this;

       }

       

-      public override Builder MergeFrom(pb::CodedInputStream input) {

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

         return MergeFrom(input, pb::ExtensionRegistry.Empty);

       }

       

-      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

         uint tag;

         string field_name;

@@ -3450,10 +3450,10 @@
         public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

           return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

         }

-        public static Group1 ParseFrom(pb::CodedInputStream input) {

+        public static Group1 ParseFrom(pb::ICodedInputStream input) {

           return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

         }

-        public static Group1 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

           return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

         }

         public static Builder CreateBuilder() { return new Builder(); }

@@ -3570,11 +3570,11 @@
             return this;

           }

           

-          public override Builder MergeFrom(pb::CodedInputStream input) {

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

             return MergeFrom(input, pb::ExtensionRegistry.Empty);

           }

           

-          public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

             pb::UnknownFieldSet.Builder unknownFields = null;

             uint tag;

             string field_name;

@@ -4576,10 +4576,10 @@
     public static SpeedMessage2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

       return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

     }

-    public static SpeedMessage2 ParseFrom(pb::CodedInputStream input) {

+    public static SpeedMessage2 ParseFrom(pb::ICodedInputStream input) {

       return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

     }

-    public static SpeedMessage2 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+    public static SpeedMessage2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

     public static Builder CreateBuilder() { return new Builder(); }

@@ -4739,11 +4739,11 @@
         return this;

       }

       

-      public override Builder MergeFrom(pb::CodedInputStream input) {

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

         return MergeFrom(input, pb::ExtensionRegistry.Empty);

       }

       

-      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

         uint tag;

         string field_name;

@@ -5740,10 +5740,10 @@
     public static SpeedMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

       return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

     }

-    public static SpeedMessage2GroupedMessage ParseFrom(pb::CodedInputStream input) {

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input) {

       return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

     }

-    public static SpeedMessage2GroupedMessage ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

     public static Builder CreateBuilder() { return new Builder(); }

@@ -5842,11 +5842,11 @@
         return this;

       }

       

-      public override Builder MergeFrom(pb::CodedInputStream input) {

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

         return MergeFrom(input, pb::ExtensionRegistry.Empty);

       }

       

-      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

         uint tag;

         string field_name;