Fix i18n error when resource-name is non-english

When executing commands about event and resource with
non-english resource-name, error "'ascii' codec can't
decode byte...." will occur.

Root cause is that heatclient can not generate a correct
encoded url. This Patch will use quote and safe_encode
functions to implement a url-encode process.

Closes-Bug: #1249234
Change-Id: I4261fdaf6ccc60aebdb9df236f4eedce0f9baa14
Revert "Don't call credentials_headers() twice"

When we create or update a stack, when deferred_auth_method=password
(which is the default in heat.conf), the client must pass the username
and password, even if they don't need to for authentication (ie
they're passing a token). Otherwise there's no username and password
in the context to store, and the engine validation in
heat/engine/service.py::_validate_deferred_auth_context fails.

No such issue exists when deferred_auth_method=trusts, which is why
this problem was missed during testing of the patch being reverted.

Note some fixup in addition to the revert was required to make the
tests pass, as ShellTestToken and ShellTestStandaloneToken now require
username/password set in the fake env.

This reverts commit a7ba3c323b16227e0ba2527f21bc89625f125234
Change-Id: I0e7bc3f748022c2bf5ef7ef6dfe4d97953e3fcab
Merge "Fix i18n error when resource-name is non-english"