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'm simply trying to avoid a "sometimes sync, sometimes async" method, which can produce unexpected behavior to the developer. My use of `this.getCredentials` is in one place now, but could be used elsewhere later. I have that sense I'm just missing something, so feel free to say "just remove the `setImmediate`" and I will follow.