Label structs when they are members of other structs.

Adds the type label for non-pointer struct fields.
Add explicit license name.
Detect cyclic references to prevent infinite recursion.

Prevents panics from stack overflow with a heuristic to detect cycles.
Merge branch 'master' into compact-output

Conflicts:
	formatter.go
	formatter_test.go