Make sure the exception trace is logged and printed.

sys.exc_info() doesn't seem to work reliably below here, especially
for early exceptions, but since we actually have the values it should
return handy, pass them along explicitly.
reports module should be optional; be more careful with dictionary
use so we don't trip up if it's not configured or partially configured.
Maintain reference count, not just bool, for refreshing devices.

Multiple things could ask for a refresh before an outstanding
refresh finishes, and we don't want the first answer to come back
to clear the refreshing bit so the further responses are treated
as real events without the "synthetic" flag.

This isn't perfect (if a real person presses a button while the
thundering refresh herd is still chugging along, their press will
be treated as synthetic) but it's better than the current behavior
(and even in that case, the last would-be-refresh response will be
treated as not synthetic, so a real event will eventually be
generated).

Fixes #11, partially.
Ignore "synthetic" events for syncing up synther.bridge state.

Fixes #11, the rest of the way.