support for pointers to all predeclared types and previously missing slices of predeclared types

This PR adds support for pointer fields so consumers can allow zero values in required fields.

I also noticed slices of some predeclared types were missing, so I added support for those, too. I tried to keep the commits focused on a single logical change, so I can remove the new slice types if you don't want to add support for them.

There are now tests to verify binding and validation for all the supported types.

Although the type switches are now bigger, I tried to keep them relatively organized; each type switch has groups of cases for the predeclared type with the predeclared type, a pointer to the predeclared type, and then a slice of the predeclared type (in that order).