protogen: generate message skeletons

Copy generator.CamelCase for camel-casing names, with one change: Convert
'.' in names to '_'. This removes the need for the CamelCaseSlice function
which operates on a []string representing a name split along '.'s.

Add protogen.Message.

Reformat generated code.

Add regenerate.bash, largely copied from regenerate.sh.

Change-Id: Iecf0bfc43b552f53e458499a328b933b0c9c5f82
Reviewed-on: https://go-review.googlesource.com/130915
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/cmd/protoc-gen-go/main.go b/cmd/protoc-gen-go/main.go
index 9ea1420..7973895 100644
--- a/cmd/protoc-gen-go/main.go
+++ b/cmd/protoc-gen-go/main.go
@@ -30,6 +30,21 @@
 	g.P("// source: ", f.Desc.GetName())
 	g.P()
 	g.P("package TODO")
+	g.P()
+
+	for _, m := range f.Messages {
+		genMessage(gen, g, m)
+	}
 
 	// TODO: Everything.
 }
+
+func genMessage(gen *protogen.Plugin, g *protogen.GeneratedFile, m *protogen.Message) {
+	g.P("type ", m.GoIdent, " struct {")
+	g.P("}")
+	g.P()
+
+	for _, nested := range m.Messages {
+		genMessage(gen, g, nested)
+	}
+}