Support custom options in C#

This consists of:
- Changing the codegen for the fixed set of options protos, to parse unknown fields instead of skipping them
- Add a new CustomOptions type in the C# support library
- Expose CustomOptions properties from the immutable proto wrappers in the support library

Only single-value options are currently supported, and fetching options values requires getting the type right
and knowing the field number. Both of these can be addressed at a later time.

Fixes #2143, at least as a first pass.
diff --git a/csharp/generate_protos.sh b/csharp/generate_protos.sh
index 7cbcf43..d2f4747 100755
--- a/csharp/generate_protos.sh
+++ b/csharp/generate_protos.sh
@@ -50,9 +50,10 @@
     src/google/protobuf/unittest_well_known_types.proto
 
 # Different base namespace to the protos above
-$PROTOC -Icsharp/protos --csharp_out=csharp/src/Google.Protobuf.Test \
+$PROTOC -Isrc -Icsharp/protos --csharp_out=csharp/src/Google.Protobuf.Test \
     --csharp_opt=base_namespace=UnitTest.Issues \
-    csharp/protos/unittest_issues.proto
+    csharp/protos/unittest_issues.proto \
+    csharp/protos/unittest_custom_options_proto3.proto
 
 # Don't specify a base namespace at all; we just want to make sure the
 # results end up in TestProtos.