Add ToString() code generation to allow for logging of messages

This pull request implements ToString() method generation, to support logging of protobuf messages (primarily for debugging purposes).

Each field is output as FieldName: FieldValue. If the field is optional and nullable, the Field is omitted (for the purposes of cleaner logging of Union style messages). If the field is repeated, the ToString() method is called recursively for that type and printed as a comma separated list within "[ ]" characters.