Implemented non html version of utf8 hard wrap

Summary: phutil_uft8_hard_wrap function and unit test to test behavior

Test Plan: Unit tests

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin

Differential Revision: https://secure.phabricator.com/D5142
Restore older SimpleOptions parsing behavior for values with spaces

Summary:
Previously, you could do `name=blah blah blah`. After the recent update, we require spaces to be quoted.

Instead, permit unescaped spaces in values but not in keys. This fixes some older memes from pre-escape times.

Test Plan: Ran unit tests.

Reviewers: vrana

Reviewed By: vrana

CC: aran

Differential Revision: https://secure.phabricator.com/D5161
Introduce libphutil UTF8 case changing functions

Summary:
Ref T2632. To fix one of the issues there, we need to be able to call `ucwords()` on utf8 strings. Currently, `ucwords()` mangles utf8 strings destructively. For example:

  $ php -r 'echo ucwords("\xE9\xBA\x9F");' | icat
  \xc9\xba\x9f
  ^^^^
  WTF?

Write a wrapper function instead. These wrappers should work okay if `mbstring` is available; probably not as well without it.

I've been very conservative in my implementation of ucwords() to avoid doing anything crazy with languages I don't speak. We can refine these later.

Test Plan: Added unit tests.

Reviewers: AnhNhan, chad, vrana

Reviewed By: AnhNhan

CC: aran

Maniphest Tasks: T2632

Differential Revision: https://secure.phabricator.com/D5191