Update NonceProvider to be more extensible
Maintaining nonce off-chain is hard. Developers need to make sure that every transactions sent are in order and can't be overlapped. If there is any errors occur when sending transaction, the nonce can't be increased. We added provideNonce() in NonceProvider to better handle these edge cases.