allow formatters to publish metadata

formatters can now return either data or (data, metadata)

the resulting published dict has both content.data keyed by mime-types,a
and content.metadata keyed by mime-types.

metadata keys are not necessarily defined, and are generally undefined when they would have no content.

This fits fully within the existing message spec.
publish image shape as metadata
support display_pub metadata in js frontend
format-related docstrings!
remove publish_foo functions
add metadata to display functions

also consolidate a bunch of duplicate code
do't define redundant _publish in core.display
display_mime(objs, metadata) puts metadata into mime type key

adds display(raw=True), which maps directly to publish_display_data on each arg.
discuss display metadata in messaging doc
add metadata to nbformat Python API
Merge pull request #3190 from minrk/image_size

allow formatters to specify metadata