We want a powerful and user-friendly API that exposes commonly used steps in tx processing. For example, getting utxos to send a tx (/checking if we have the utxos we need to send a tx), getting a tx fee, and checking a tx size are all things that are commonly done without broadcasting a tx. We keep methods that do not need to be async as, well, not async. Only `broadcast() is (of necessity) async.
Note we will need to have a websocket that keeps the utxo set in sync, as a dev it is annoying to always have to remember to call await wallet.sync() before sending a tx. However, I think we need to get the tx API worked out first so we know what exactly the websocket should do and manage.