Add mojo::Binding<Interface> for more flexible pipe<->impl binding

This provides a mojo::Binding<Interface> class that takes a pointer to an
interface implementation and binds it to a pipe. This type can be composed into
the interface implementation or managed separately, depending on the needs of
the implementation. This is in contrast to InterfaceImpl<Interface> which uses
implementation inheritance to store the binding with the pipe and thus forces
the implementation into having a rigid relationship with the pipe.

Binding<Interface> maps messages on the pipe to the interface and allows
registering an error handler to be notified of connection errors but does not
implement an error handling strategy itself. Deleting a Binding closes the pipe.

StrongBinding<Interface> additionally deletes the interface on receiving a pipe
error.

InterfaceImpl<Interface> is rewritten in this patch to use a Binding<Interface>
internally. I intend to transition all code away from using
InterfaceImpl<Interface> to using Binding<Interface> directly, or if it's useful
adding other helper classes for common patterns. I have a few examples of how
this transition looks here: https://codereview.chromium.org/713313002 and here:
https://codereview.chromium.org/718623004.

BUG=431963
R=davemoore@chromium.org

Review URL: https://codereview.chromium.org/718473003