register custom DisplayFormatter for table schema
instead of using `_ipython_display_` for custom mime-types

This should solve the issues in #16171, without needing to register/unregister `_ipython_display_`.

In the long run, https://github.com/ipython/ipython/pull/10496 should remove the need for any custom registration, in favor of a simple `_repr_mimebundle_` method.

I think the only thing missing is the UnserializableWarning because IPython does its own catching and displaying of tracebacks when formatters fail. I can copy and modify a little more code out of the base Formatter to preserve that warning, though.