go: cache struct tags and create if no tags present

When repeatedly processing the same type, we now cache the parsing of
the struct tags.  This is a considerable speed-up.  We also construct a
name->index mapping to eliminate the special casing of having
struct-tags or not.  (If there are no tags, we construct a mapping from
the type's exported fields.)
go: clean up some dead-code from cached structtags change

We now always return a map of field->index mappings for all public
fields.  This means the tags map is non-nil if there are any fields to
marshal.  This patch updates the code to make this (non-nil map) the
normal case.