storage: fix credentials issue.

Previously, if a user wanted to generate a signed URL, there was no guarantee a credentials object would have already been generated. By itself, generating a signed URL doesn't require a network connection, thus the uncertainty that we would have already fetched a token. This change requires a valid credentials object to exist before returning the `credentials` object.

~~This also brings up an issue. We need to go through the code to catch any "maybe async, maybe not" functions, and add in a `process.nextTick` where necessary.~~ (#166)
I just updated it `setImmediate`. But, the reason to async-ify it is because `getCredentials` will sometimes have to invoke an API request, whereas times after, it won't.