xio: restructure binding of portals wrt port 0

existing behaviour with respect to port 0 is that we create and bind a
SimpleMessenger first, then shift the port it gets for use with the
XioMessenger.  this is necessary when both tcp and accelio messengers
are in use, so that we can find either messenger from the address in a
map.  but for configurations where a tcp messenger isn't needed, we can
avoid creating the SimpleMessenger by allowing xio to bind on port 0.

XioMessenger::bind() skips the port shift when given port 0, and
shifts the actual assigned port backwards for the call to set_myaddr()

XioPortals::bind() returns the port assigned by xio_bind() for portal 0.
other portals always bind on port 0, because only portal 0 needs to be
addressable in maps, and the port stride could potentially overflow

XioPortal::bind() has to reformat its uri to replace port 0 with the
assigned port, which it does with PrebufferedStreambuf

Signed-off-by: Casey Bodley <casey@linuxbox.com>
Signed-off-by: Matt Benjamin <matt@linuxbox.com>
xio: fix for unnecessary free(portal_id)

Signed-off-by: Casey Bodley <casey@linuxbox.com>
Signed-off-by: Matt Benjamin <matt@linuxbox.com>
Adapt a51447a to avoid PrebufferedStreambuf.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>