Change the string comparison in CGUITextLayout::UpdateW to be case-sensitive

It seems likely that it was only case-insensitive due to the the default
seting of CStdStr::Equals. It's unlikely that you'd ever want to update a
string with another which is the same except for the case of one or more
characters, but if you did, I doubt you'd want to use the cached version if
so. And you're slowing down the comparison in all other cases to achieve that
dubious behaviour.
Add caching of text labels at the UTF8 level

Previously, CGUITextLayout::Update converted its string argument from UTF8 to
UTF16, then passed it to CGUITextLayout::UpdateW, where it was compared
against a cached copy of the string (in its UTF16 form). However, the
conversion itself was taking up a reasonable chunk of CPU time.

This patch adds a similar cache of the string in its UTF8 form to the Update
method, and splits the non-cache part of UpdateW into a separate function, so
we can bypass it the case where we've tested it against the UTF8 cache.

I have measured the effect while the Videos window of the default skin was
open (but idle) on a Raspberry Pi, and this reduced the CPU usage by 2.9%
from 39.1% to 36.2%:

          Before          After
          Mean   StdDev   Mean   StdDev  Confidence  Change
IdleCPU%  39.1   0.9      36.2   0.5     100.0%      +8.1%
Merge pull request #3709 from bavison/cache_utf8_text

Add caching of text labels at the UTF8 level