Initial split of internal and external api types.

It's not exactly analogous. See: http://golang.org/pkg/reflect/#Value.CanAddr