Refresh authentication tokens when they expire

This changes the Auth API slightly to fix token refresh when using the AWS instance metadata service to fetch credentials.

If breaking the API is an issue, Auth.token could be switch back to public, but then there's the risk of some parts of the code using the field directly instead of the method.

Right now, errors when reloading are ignored. One could add an error to the return values of Token() if that's considered an issue.