Extracted ICodedInputStream interface
diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs
index 2476cf1..fc705fd 100644
--- a/src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs
+++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs
@@ -238,10 +238,10 @@
     public static TestXmlChild ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

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

     }

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

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

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

     }

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

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

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

     }

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

@@ -314,11 +314,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;

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

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

     }

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

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

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

     }

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

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

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

     }

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

@@ -559,11 +559,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;

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

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

         }

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

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

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

         }

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

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

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

         }

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

@@ -820,11 +820,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;

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

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

     }

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

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

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

     }

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

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

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

     }

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

@@ -1200,11 +1200,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;

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

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

     }

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

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

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

     }

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

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

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

     }

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

@@ -1619,11 +1619,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;