Model: support calling build_*dn() with custom values.

This allows us to build DNs on uninstantiated classes.
Add bind_as() to support binding to different credentials.
Support bind_as() on a class.