Strings: unified substring() behavior when both start and length are negative

behavior of iconv_substr is inconsistent with mb_substr (http://3v4l.org/JvOlj)
Strings: chr() throws exception for invalid code points
Strings: added tests for more UTF-8 edge cases
typo