Several performance tweaks
- Removed default value assingment when default is equal to default(T)
- Added Benchmarks for most types and repeated/packed arrays
- Left PopsicleList's list fields uninitialized util needed
- Changed CodedInputStream's repated/packed reader
- Changed Enum writers to simply cast to int
- Changed the WriteEnum to use object rawValue that provides .ToString() if needed
- Should be fully on par with original library for performance, gaining 2x-3x in some cases
diff --git a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
index e9c4c60..50ea783 100644
--- a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
+++ b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
@@ -1275,7 +1275,7 @@
         

         public const int BbFieldNumber = 1;

         private bool hasBb;

-        private int bb_ = 0;

+        private int bb_;

         public bool HasBb {

           get { return hasBb; }

         }

@@ -1505,7 +1505,7 @@
         

         public const int AFieldNumber = 17;

         private bool hasA;

-        private int a_ = 0;

+        private int a_;

         public bool HasA {

           get { return hasA; }

         }

@@ -1735,7 +1735,7 @@
         

         public const int AFieldNumber = 47;

         private bool hasA;

-        private int a_ = 0;

+        private int a_;

         public bool HasA {

           get { return hasA; }

         }

@@ -1949,7 +1949,7 @@
     

     public const int OptionalInt32FieldNumber = 1;

     private bool hasOptionalInt32;

-    private int optionalInt32_ = 0;

+    private int optionalInt32_;

     public bool HasOptionalInt32 {

       get { return hasOptionalInt32; }

     }

@@ -1959,7 +1959,7 @@
     

     public const int OptionalInt64FieldNumber = 2;

     private bool hasOptionalInt64;

-    private long optionalInt64_ = 0L;

+    private long optionalInt64_;

     public bool HasOptionalInt64 {

       get { return hasOptionalInt64; }

     }

@@ -1969,7 +1969,7 @@
     

     public const int OptionalUint32FieldNumber = 3;

     private bool hasOptionalUint32;

-    private uint optionalUint32_ = 0;

+    private uint optionalUint32_;

     public bool HasOptionalUint32 {

       get { return hasOptionalUint32; }

     }

@@ -1980,7 +1980,7 @@
     

     public const int OptionalUint64FieldNumber = 4;

     private bool hasOptionalUint64;

-    private ulong optionalUint64_ = 0UL;

+    private ulong optionalUint64_;

     public bool HasOptionalUint64 {

       get { return hasOptionalUint64; }

     }

@@ -1991,7 +1991,7 @@
     

     public const int OptionalSint32FieldNumber = 5;

     private bool hasOptionalSint32;

-    private int optionalSint32_ = 0;

+    private int optionalSint32_;

     public bool HasOptionalSint32 {

       get { return hasOptionalSint32; }

     }

@@ -2001,7 +2001,7 @@
     

     public const int OptionalSint64FieldNumber = 6;

     private bool hasOptionalSint64;

-    private long optionalSint64_ = 0;

+    private long optionalSint64_;

     public bool HasOptionalSint64 {

       get { return hasOptionalSint64; }

     }

@@ -2011,7 +2011,7 @@
     

     public const int OptionalFixed32FieldNumber = 7;

     private bool hasOptionalFixed32;

-    private uint optionalFixed32_ = 0;

+    private uint optionalFixed32_;

     public bool HasOptionalFixed32 {

       get { return hasOptionalFixed32; }

     }

@@ -2022,7 +2022,7 @@
     

     public const int OptionalFixed64FieldNumber = 8;

     private bool hasOptionalFixed64;

-    private ulong optionalFixed64_ = 0;

+    private ulong optionalFixed64_;

     public bool HasOptionalFixed64 {

       get { return hasOptionalFixed64; }

     }

@@ -2033,7 +2033,7 @@
     

     public const int OptionalSfixed32FieldNumber = 9;

     private bool hasOptionalSfixed32;

-    private int optionalSfixed32_ = 0;

+    private int optionalSfixed32_;

     public bool HasOptionalSfixed32 {

       get { return hasOptionalSfixed32; }

     }

@@ -2043,7 +2043,7 @@
     

     public const int OptionalSfixed64FieldNumber = 10;

     private bool hasOptionalSfixed64;

-    private long optionalSfixed64_ = 0;

+    private long optionalSfixed64_;

     public bool HasOptionalSfixed64 {

       get { return hasOptionalSfixed64; }

     }

@@ -2053,7 +2053,7 @@
     

     public const int OptionalFloatFieldNumber = 11;

     private bool hasOptionalFloat;

-    private float optionalFloat_ = 0F;

+    private float optionalFloat_;

     public bool HasOptionalFloat {

       get { return hasOptionalFloat; }

     }

@@ -2063,7 +2063,7 @@
     

     public const int OptionalDoubleFieldNumber = 12;

     private bool hasOptionalDouble;

-    private double optionalDouble_ = 0D;

+    private double optionalDouble_;

     public bool HasOptionalDouble {

       get { return hasOptionalDouble; }

     }

@@ -2073,7 +2073,7 @@
     

     public const int OptionalBoolFieldNumber = 13;

     private bool hasOptionalBool;

-    private bool optionalBool_ = false;

+    private bool optionalBool_;

     public bool HasOptionalBool {

       get { return hasOptionalBool; }

     }

@@ -2758,13 +2758,13 @@
         output.WriteMessage(20, field_names[30], OptionalImportMessage);

       }

       if (hasOptionalNestedEnum) {

-        output.WriteEnum(21, field_names[33], (int) OptionalNestedEnum, OptionalNestedEnum.ToString());

+        output.WriteEnum(21, field_names[33], (int) OptionalNestedEnum, OptionalNestedEnum);

       }

       if (hasOptionalForeignEnum) {

-        output.WriteEnum(22, field_names[27], (int) OptionalForeignEnum, OptionalForeignEnum.ToString());

+        output.WriteEnum(22, field_names[27], (int) OptionalForeignEnum, OptionalForeignEnum);

       }

       if (hasOptionalImportEnum) {

-        output.WriteEnum(23, field_names[29], (int) OptionalImportEnum, OptionalImportEnum.ToString());

+        output.WriteEnum(23, field_names[29], (int) OptionalImportEnum, OptionalImportEnum);

       }

       if (hasOptionalStringPiece) {

         output.WriteString(24, field_names[40], OptionalStringPiece);

@@ -2890,13 +2890,13 @@
         output.WriteBytes(75, field_names[1], DefaultBytes);

       }

       if (hasDefaultNestedEnum) {

-        output.WriteEnum(81, field_names[11], (int) DefaultNestedEnum, DefaultNestedEnum.ToString());

+        output.WriteEnum(81, field_names[11], (int) DefaultNestedEnum, DefaultNestedEnum);

       }

       if (hasDefaultForeignEnum) {

-        output.WriteEnum(82, field_names[7], (int) DefaultForeignEnum, DefaultForeignEnum.ToString());

+        output.WriteEnum(82, field_names[7], (int) DefaultForeignEnum, DefaultForeignEnum);

       }

       if (hasDefaultImportEnum) {

-        output.WriteEnum(83, field_names[8], (int) DefaultImportEnum, DefaultImportEnum.ToString());

+        output.WriteEnum(83, field_names[8], (int) DefaultImportEnum, DefaultImportEnum);

       }

       if (hasDefaultStringPiece) {

         output.WriteString(84, field_names[17], DefaultStringPiece);

@@ -5806,7 +5806,7 @@
     

     public const int CFieldNumber = 1;

     private bool hasC;

-    private int c_ = 0;

+    private int c_;

     public bool HasC {

       get { return hasC; }

     }

@@ -8483,7 +8483,7 @@
     

     public const int AFieldNumber = 17;

     private bool hasA;

-    private int a_ = 0;

+    private int a_;

     public bool HasA {

       get { return hasA; }

     }

@@ -8713,7 +8713,7 @@
     

     public const int AFieldNumber = 47;

     private bool hasA;

-    private int a_ = 0;

+    private int a_;

     public bool HasA {

       get { return hasA; }

     }

@@ -9519,7 +9519,7 @@
     

     public const int DeprecatedFieldFieldNumber = 1;

     private bool hasDeprecatedField;

-    private int deprecatedField_ = 0;

+    private int deprecatedField_;

     public bool HasDeprecatedField {

       get { return hasDeprecatedField; }

     }