Proto commits in btcsuite/btcwallet

These 5 commits are when the Protocol Buffers files have changed:

Commit:fb06a6b
Author:Josh Rickmar
Committer:Josh Rickmar

Cleanup TransactionDetails RPC messages. Remove the addresses field from TransactionDetails.Output. It is assumed that the caller is able to deserialize the transaction and encode the output scripts to addresses, so this is unnecessary server overhead and conflicts with the current API philosophy of not duplicating data already included in another field. Since there is no additional data included for outputs not controlled by the wallet, remove the `mine` specifier from the Output message and replace it with an output index. Only include messages for controlled outputs, rather than creating messages for both controlled and uncontrolled outputs. Rename the repeated field from `outputs` to `credits` to be consistent with the `debits` field. Bump major API version as this is a breaking change. Closes #408.

The documentation is generated from this commit.

Commit:82e7437
Author:John C. Vernaleo
Committer:John C. Vernaleo

Rename some rpc commands to something more generic. StartBtcdRpc becomes StartConsensusRpc. This is useful for forks such as decred or if someone were to write another compatible server. Bump up the api version as this is a change.

Commit:620a3c6
Author:Josh Rickmar
Committer:Josh Rickmar

Add VersionService to gRPC server to query server versions. Fixes #375.

Commit:8455454
Author:Josh Rickmar
Committer:Josh Rickmar

Add Kind enum to NextAddress request. Fixes #371.

Commit:497ffc1
Author:Josh Rickmar
Committer:Josh Rickmar

Modernize the RPC server. This is a rather monolithic commit that moves the old RPC server to its own package (rpc/legacyrpc), introduces a new RPC server using gRPC (rpc/rpcserver), and provides the ability to defer wallet loading until request at a later time by an RPC (--noinitialload). The legacy RPC server remains the default for now while the new gRPC server is not enabled by default. Enabling the new server requires setting a listen address (--experimenalrpclisten). This experimental flag is used to effectively feature gate the server until it is ready to use as a default. Both RPC servers can be run at the same time, but require binding to different listen addresses. In theory, with the legacy RPC server now living in its own package it should become much easier to unit test the handlers. This will be useful for any future changes to the package, as compatibility with Core's wallet is still desired. Type safety has also been improved in the legacy RPC server. Multiple handler types are now used for methods that do and do not require the RPC client as a dependency. This can statically help prevent nil pointer dereferences, and was very useful for catching bugs during refactoring. To synchronize the wallet loading process between the main package (the default) and through the gRPC WalletLoader service (with the --noinitialload option), as well as increasing the loose coupling of packages, a new wallet.Loader type has been added. All creating and loading of existing wallets is done through a single Loader instance, and callbacks can be attached to the instance to run after the wallet has been opened. This is how the legacy RPC server is associated with a loaded wallet, even after the wallet is loaded by a gRPC method in a completely unrelated package. Documentation for the new RPC server has been added to the rpc/documentation directory. The documentation includes a specification for the new RPC API, addresses how to make changes to the server implementation, and provides short example clients in several different languages. Some of the new RPC methods are not implementated exactly as described by the specification. These are considered bugs with the implementation, not the spec. Known bugs are commented as such.