libflux: change new request prototypes

These functions should return -1 on error 0 on success instead of
response JSON, since a NULL json response is not necessarily an error.
New prototypes are:

int flux_vrpcf (flux_t h, uint32_t nodeid, JSON in, JSON *out,
                const char *fmt, va_list ap);

int flux_rpcf (flux_t h, uint32_t nodeid, JSON in, JSON *out,
               const char *fmt, ...)

These are still not publicly exposed.
libflux: add accessors for event sequence number
broker: set sequence number on published events
broker: check event seqs on receipt

Detect missed, duplicate, or malformed events and log them.
libflux: add flags for optional frames

Access proto frame using zmsg_last, which avoids scanning for it,
and add flags for presence of topic/payload frames:

  FLUX_MSGFLAG_PAYLOAD  - message has payload (json)
  FLUX_MSGFLAG_TOPIC    - message has topic

By moving the proto frame to the end, we can put the topic frame
back at the beginning where it will work for zeromq subscriptions.
broker: use keepalive messages instead of cmb.hb
flux-snoop: handle keepalive messages