Implement new streaming APIs

This adds new functions that are used by coordinators and workers to
negotiate an RPC stream. A stream is simply any response that requires
multiple messages from the worker.

BugzId: 22729
Exit with timeout instead of returning an atom

Every function that called `rexi:stream/1` had to check the return value
for timeout and would then call `erlang:exit/1` if that atom were
returned. Rather than force every function to make this check this just
calls exit in `rexi:stream/1`. Its possible to catch this if a process
ever happens to require it.

BugzId: 22729
Allow callbacks to update their list of workers

We need this to be able to allow coordinators to replace nodes that are
in maintenance mode.

BugzId: 22729
Implement new stream2 API

This embeds the stream_init/1 logic into the stream functions so that we
don't have to maintain the logic for inititalizing the stream for all
clients.

BugzId: 24635
Remove old code_change, set module version to 1
Rejigger the governor implementation

Previously we'd spawn a number of processes to send messages to
'noconnect' / 'nosuspend' nodes.  Now we're buffering the messages that
need to be sent directly in each governor and sending them one at a
time.  This prevents the net_kernel from tipping over in the noconnect
case.  We also decide whether to drop messages based on memory
consumption in the node instead of process limits (since we're not
spawning anymore).

BugzID: 23717
BugzID: 23718
Start a supervised rexi_governor per node

This generalizes rexi_server_mon to start per-node versions of a server
specified by a child module.

BugzID: 23717
BugzID: 23718
Remove gov_manager from supervision

We'll remove the module itself in a subsequent release.
Try to start per-node servers immediately

I can't think of a good reason not to do this.
Don't block the governor to send a message

This allows the governor to continue prioritizing incoming requests
instead of hanging for several seconds to try to connect to the remote
node.

BugzID: 23717
BugzID: 23718
Rename governor to buffer

Buffer describes the behavior quite a bit better than governor.

BugzId: 23717
BugzId: 23718
Revert "Tag all replies to the coordinator"

Not all rexi communication happens through `rexi_utils:recv/6`. We'll
need to audit all of our apps to see anywhere that doesn't to update to
the new message format.

This reverts commit 2f967906730eedf5851752be06155fc49edd28a1.
Removed upgrade statement in rexi:kill/2

Removing cruft we no longer need that was sending an extra useless
message.

BugzId: 27671
Hibernate rexi_buffer when becoming idle

The rexi_buffer gen_server can hold onto quite a bit of RAM during idle
operation. This just checks when we're going back to the idle state and
hibernates until the next message arrives. This ensures that we run
garbage collection before sitting idle.

BugzId: 27672
Slight style tweaks to rexi_buffer hibernation

Avoid using a possibly misleading variable name by not naming it.
Alternatively, this is not the variable name you are looking for.

BugzId: 27672
Configure buffer limit by message count

This allows an operator to decide how large the buffers should be. It
also provides an escape valve to clear the buffer entirely.
Fix counting bug in buffer

Quoting @davisp:

There's a bug in rexi_buffer that can lead to the counter in its state
running negative. I noticed this on malort looking for memory usage. A
quick reading of the code suggests its due to us getting a timeout
message with an empty queue. Theoretically this could happen if we've
exceeded the MAX_MEMORY threshold when sending a message or even with
just grabbing the buffered count when its idle.

BugzID: 28049
Add max_count to state record
Fix error_limit = 0, and make it the default

Setting the error_limit to 0 would previously cause rexi_server to crash
on the next error because of an unhandled exception in a queue:drop/1.
This fixes that exception and makes a limit of 0 the default. Operators
can still raise the limit to capture errors in the future if we end up
finding that useful.

BugzID: 30821
Update to use new multi rexi_server protocol