Any value conforming to Bindable can be bound

This improves type safety when binding, and also allows arbitrary types to be bound as long as they map to one of the core bind methods.