agent: Add cockpit_channel_get_strv_option() function

Used by channel implementors to get a string array from the
channel options. Implemented this using cockpit_json_get_strv()
utility function.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
common: Simplify the mock service code a bit

We use the GDBusObjectManager to look up the extra objects rather
than having a separate hash table for them.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
common: Add RequestPropertyMods method to mock service

A simple way to check PropertiesChanged signal

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
common: Add a path which fails introspection to mock service

We can use this for checking our introspection logic.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
common: Bug fix for using mock service more than once in a process

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
common: Force mock service to always use a new dbus connection

Otherwise this can lead to races between tests.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
agent: Implement CockpitFakeManager a GDBusObjectManager clone

This implements GDBusObjectManager by using Introspect() and
PropertiesChanged signals to discover objects that show up.
We watch signals for object paths, and then Introspect() them to
see if they're valid and what interfaces are present.

We assume that each new, changed, removed interafce will have a
signal related to it emitted. Without this there's not much we
can do to track new objects etc.

At present this is a bit racy. If an object changes while we're
already looking at it we won't introspect it again.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
agent: CockpitDBusJson works with plain GDBusObjectManager

Use only GDBusObjectManager interface in CockpitDBusJson. This way
we can switch in other implementations.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
agent: Support "object-paths" argument in dbus-json1 channel

When this option is specified instead of an "object-manager" option,
we use CockpitFakeManager to discover objects rather than
GDBusObjectManagerClient.

Fixes #251
Closes #460
Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>