tools: Add frob-catmsgs tool for sending raw messages to agent

Specify a directory of files, each which is a message, complete
with the channel prefix. frob-catmsgs will send the correct
MSB length prefix.

See doc/protocol.md for more details

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
agent: Fix several leaks in cockpit-agent

The functions json_builder_add_value(), json_object_set_member() and
json_builder_get_root() have unexpected ownership characteristics.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
web: Show Docker failures near the top of the page

Rather than inline in the tables. Then the tables can be data driven.

Fixes #310
Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
web: Put docker stuff in its own private scope

This allows us to go wild with docker specific helper functions
and stuff inside of cockpit-docker.js without leaking them all
into the global scope.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
web: Allow getting page params from further down the stack.
web: Add .filter-unimportant and .unimportant CSS classes

These are used when you have a bunch of things (like rows in a table)
some of which are unimportant, and there's an optional filter
to hide them. .unimportant gets set on the thing (like the row)
and .filter-unimportant gets set on an ancestor, when you want
to hide the unimportant things.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
web: Migrate DockerClient to a DOM for container and image overview

This is a simple DOM, it would be nice to do more work here later
and use angular.

Moved the table headings into index.html, where they should
live, and use a proper <thead> to make the headings bold.

Use a simple system to check if /events can reconnect. If we get
at least one successful response from something since the last
time /events tried to connect, then we permit it to try again
to reconnect.

Among other things:
Fixes #268
Closes #310

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
web: Connect DockerClient to the right machine.

And allow sharing it between pages.
web: Use CSS .unimportant class to implement the container filter

This is much cleaner, and separates out display from updating logic.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
web: Cleaner logic for updating container and image rows

This is in lieu of using angularjs. Don't replace whole rows, so we
don't break state in those rows unnecessarily. In addition, sort the
new rows we bring in alphabetically. We'll do more complex sorting
later.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
web: Use DOM to fill container and image details page.
web: Use bar graphs in container image overview rows

These represent the size of the image on disk.

Partially fixes #312
WIP add memory graph to the Containers table