Prettyprint

Add a struct/enum/or-flag printer to libfabric.

I moved around some defs in the first patch so to avoid casting an uint64 as an enum, also created a simple fi_addr struct to wrap around an address + length. This may or may not break PSM provider using the provider enum to store extra info.

If these first changes are too controversial I can rebase them out, but I think readability is lost without them.