BUG-1394: Do not notify RPC callers until the report hits the datastore

During bursts of activity, unblocking RPC callers early can lead into
datastore overload, as the callers will immediately issue a new request,
which in turn can succeed before the datastore has had a chance to catch
up.

As a side-effect, that also fixes a logical race condition, where the
caller sees the RPC succeed, but when looking into the topology, still
does not see the state recorded there.

Finally we take care to reorganize the tracking of outstanding requests,
because netty may give us the response from the router before it gives
us the notification that the request has in fact left. Now each request
has a state and the transitions are carefully managed.

Change-Id: I06b1a56777ffb2df6394f1cdcb74396160bb4e4b
Signed-off-by: Robert Varga <rovarga@cisco.com>
Use Collections.singletonList()

Removes the use of ArrayList and ImmutableList for carrying a single
element.

Change-Id: I8ce335d2e82b57e7696b105b46cb387cd3cd8c0c
Signed-off-by: Robert Varga <rovarga@cisco.com>