Handle all permutations of identifier-binding.

Although this fixes #39 as-reported, it doesn't handle the case of a
provide using contract-out's rename option -- a contract and a rename,
both -- because identifier-binding doesn't really "know about"
contracts. If handling that is possible at all, it might be with an
undocumented syntax property, and I'll make that a separate commit.