Extracted ICodedInputStream interface
diff --git a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
index abe47a2..af53cc0 100644
--- a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
+++ b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
@@ -172,10 +172,10 @@
     public static TestRequiredLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

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

     }

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

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

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

     }

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

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

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

     }

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

@@ -242,11 +242,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) {

         uint tag;

         string field_name;

         while (input.ReadTag(out tag, out field_name)) {

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

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

         }

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

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

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

         }

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

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

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

         }

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

@@ -539,11 +539,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) {

             uint tag;

             string field_name;

             while (input.ReadTag(out tag, out field_name)) {

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

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

         }

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

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

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

         }

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

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

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

         }

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

@@ -877,11 +877,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) {

             uint tag;

             string field_name;

             while (input.ReadTag(out tag, out field_name)) {

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

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

     }

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

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

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

     }

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

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

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

     }

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

@@ -1325,11 +1325,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) {

         uint tag;

         string field_name;

         while (input.ReadTag(out tag, out field_name)) {

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

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

     }

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

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

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

     }

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

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

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

     }

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

@@ -1704,11 +1704,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) {

         uint tag;

         string field_name;

         while (input.ReadTag(out tag, out field_name)) {