BNS upgrade: SIP9 compatibility

This post is part of a larger effort to discuss potential features to be included in an upgraded version of BNS. Please see the megathread for more information.

Proposal: include SIP9 compatibility in an upgraded BNS contract.

SIP9 is a standard for Stacks NFTs. It defines a trait for common NFT-related methods, like getting an owner and transferring a name.

The current BNS contract was written before SIP9 was standardized, so apps need to use custom logic when interacting with BNS NFTs.

Implementing this proposal would allow for easier adoption of BNS in Stacks apps and wallets.

This would also change the core NFT data type (used for post conditions) of BNS to be of the type uint, instead of the current { name: (buff 48), namespace: (buff 20) } type.