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)
Yes, but your code doesn't block anything.

If you do continuos blocking work (such as encoding), it's much better to separate it into pieces not to block the entire event loop. In this case, adding the call to immediate loop is an overhead.