Extracted from #16944
First this PR simplifies the check when generating a change address, by dropping CanGetAddresses
and just letting reservedest.GetReservedDestination
do this check.
Second, when the keypool is empty, instead of immediately giving up, we create a dummy change address and pass that to coin selection. If we didn’t need the change address (e.g. when spending the entire balance), then it’s all good. If we did need a change address, we throw the original error.