add hasOAuth() method, use cached OAuth token
add hasOAuth() method, use cached OAuth token

Rather than requesting an OAuth token for every authorization-requiring request,
cache the OAuth token in storage, and try to use the cached token for subsequent
requests. Only request a new OAuth token if a failure results from using the
cached one.

New hasOAuth() method returns whether or not we have an OAuth token cached.
This will give the UI a hint about whether it should prompt the user to
authorize uProxy to access her DO account, or whether this prompt can likely be
skipped. This is only a hint because the token could have expired, or the user
could have manually revoked the access token using the DO UI at
<https://cloud.digitalocean.com/settings/api/access>.
But this is strictly better than never saving the token, which led to the
current UI which always prompts the user to "sign in and connect" to DO, even
when the user already has.

ref: #2292

uProxy/uproxy,uProxy/uproxy,uProxy/uproxy,uProxy/uproxy,uProxy/uproxy