na_cci: implement cancel
na_cci: implement cancel

Cancel always succeeds _except_ for a recv_expected that is not in the
receive queue. If recv is not in the recv queue, it has been completed
(probably by another thread). Cancel also cancels lookups.

Also, the server calls NA_Addr_free() after every send completion.
I was double freeing by calling addr_decref() in na_cci_complete()
as well. When completing sends, do not decref the na_cci_addr -
let addr_free() do that. I am not sure if put and get do the same or if
they rely on an expected send to call addr_free().

Implement NA_Addr_dup() that simply adds a refcnt and returns the same
addr. The new add, although the same, must be passed to NA_Addr_free()
to decrement the refcount properly.

mercury-hpc/mercury,mercury-hpc/mercury,mercury-hpc/mercury,mercury-hpc/mercury