I propose to add a new type:
MultiaddrWithId which is essentially a multiaddr + peer id.
Note: peer id is a
Qm + base58(sha256(public key)) (https://github.com/ipfs/faq/issues/22)
Listen will accept Multiaddress, but Dial will accept MultiaddrWithId. Because just looking at the source code it is not clear where MultiaddrWithId should be used.
P.S. Looking for a better name for this primitive.