Use IdString to wrap encoded strings in REST API calls

Clients supply encoded strings as the id portion of REST API
paths. These strings need to be decoded within the view code
as some encodings are specially handled. Try to prevent misuse
by wrapping strings in a type-safe IdString wrapper that forces
developers to decode with ".get()" before using.

The raw string can be obtained with ".encoded()", an obvious
hint that the return value will still be URL encoded. This is
used in only a handful of locations where special parsing must
be performed.

Change-Id: Ied5747d1fe8cc0f2dc24017f7aacc2fcab69a37c
20 files changed