Add self-documenting support

The primary builder will now generate a rule to call itself with
--docs=.bootstrap/docs/<name>.html to produce an automatically
generated documentation file.

The documentation generation process is:
 - Call each factory once to get empty property structs associated
   with the module type
 - Use reflection to determine the names of the type of each property
   struct
 - Use the bootstrap_go_package modules from reading the Blueprints files
   to find the source files for each Go package used to build the primary
   builder
 - Use the go/parser module to find the type declaration for each
   property struct
 - Extract comments for the property struct and each property declaration
 - Format all the comments into HTML

Change-Id: Icae9307cc10549a30bfc14d6922824099de5a9b0
diff --git a/unpack.go b/unpack.go
index 3e9fe00..83fcd32 100644
--- a/unpack.go
+++ b/unpack.go
@@ -230,7 +230,7 @@
 			fallthrough
 		case reflect.Struct:
 			localFilterKey, localFilterValue := filterKey, filterValue
-			if k, v, err := hasFilter(field); err != nil {
+			if k, v, err := HasFilter(field.Tag); err != nil {
 				errs = append(errs, err)
 				if len(errs) >= maxErrors {
 					return errs
@@ -337,8 +337,8 @@
 	return false
 }
 
-func hasFilter(field reflect.StructField) (k, v string, err error) {
-	tag := field.Tag.Get("blueprint")
+func HasFilter(field reflect.StructTag) (k, v string, err error) {
+	tag := field.Get("blueprint")
 	for _, entry := range strings.Split(tag, ",") {
 		if strings.HasPrefix(entry, "filter") {
 			if !strings.HasPrefix(entry, "filter(") || !strings.HasSuffix(entry, ")") {