split improvments: Both performance and unicode.

This is a pull that improves splitWhite: It allows it to split unicode, and improves performance.

# The commits:
1. https://github.com/monarchdodra/phobos/commit/32dafbfe71b609ce065df7ec6ffe8f38bdf9f5f3 Improve std.uni.isWhite by first checking if c < 0x80, and then branching to 1 of two implementation. This *greatly* improves the speed of `std.uni.isWhite` for *all* ascii characters, for *all* programs.
2. https://github.com/monarchdodra/phobos/commit/80155a6c00a569c63f50bfc6aaffde4cf99f9728 Use appender in split. Makes it faster as early as the second token.
3. https://github.com/monarchdodra/phobos/commit/86083860785bca91461bf8c777e0bff70b2a3bc1 Use std.ascii.isWhite in split. Just a step before making it unicode.
4. https://github.com/monarchdodra/phobos/commit/f32698c007a6a5da2363a2b26d69da85d79cd617 Making split it unicode.
5. https://github.com/monarchdodra/phobos/commit/3738f048059aecc4f833200ef66a031e4f71217f Unittest
6. https://github.com/monarchdodra/phobos/commit/3c684c4b4600164a5e40c5ee136bc72987d1023e New implementation for split. Faster as a whole.
7. https://github.com/monarchdodra/phobos/commit/d69368e101995256024d167e999165ddc2491b87 Introducing the (internal) function decodeIsWhite: It does both operations at once, giving a good boost to performance.
8. https://github.com/monarchdodra/phobos/commit/0d63710e776845c764ba560f42791626bc27c2dd decodeIsWhite unittests
9. https://github.com/monarchdodra/phobos/commit/1406bcbc009956fed8f69a3b83b7a6c14e74da70 Deploying it in decodeIsWhite stripLeft
10. https://github.com/monarchdodra/phobos/commit/1191d9c3c868cf1f61bdd7007d5a00a73864fdc7 Deploying decodeIsWhite in decodeIsWhite split
11. https://github.com/monarchdodra/phobos/commit/98314b354d28f1b4a3431767451ac8eef079bf0f More aggressive implementation of decodeIsWhite
12. https://github.com/monarchdodra/phobos/commit/7946aa40d75eb38e6257b88bbbbfeb6e427d9f7e dchar specialization for split

I'll probably rebase a bit when the review is done.

# The test methods.
There are 10 players:
1. C1: The original "classic" split
2. C2: The same with Appender
3. C3: Using std.ascii.isWhite
3. C4: Using std.uni.isWhite
4. CD1: The classic implementation, using a "decode" approach (for comparison)
5. CD2: Ditto, but uses the first decodeIsWhite
6. CD3: Ditto, but uses the second decodeIsWhite
7. D1: My new decode based implementation
8. D2: Ditto, but uses the second decodeIsWhite
9. D2: Ditto, but uses the first decodeIsWhite
10. DD: A specialized dchar implementation

And the input data, in two groups.

Short strings.
```
1. "white1" : ""
2. "white2" : "   "
3. "Hello"  : "Hello"
4. "HW"     : "Hello World"
5. "HBBW"   : " hello big beautiful world ",
6. "NHG"    : "　日　本　語　"
```
Long strings.
7.  "LI"     : Lorem ipsum poem
8.  "Blackburn" : Wikipedia's html of the page "Blackburn"
9.  "Japanese" : Wikipedia's html of the page "Japanese"
10. "Nihongo" : Wikipedia.jp's html of the page "Nihongo"
11. "Chinese" : An excerpt of "Ulysses" in chinese (http://www.humancomp.org/unichtm/ulysses8.htm)
12. "Mongolian" : The source of "http://mk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%BD%D0%B3%D0%BE%D0%BB%D1%81%D0%BA%D0%B8_%D1%98%D0%B0%D0%B7%D0%B8%D0%BA"
13. "Zenbibl8" : a bibliography on "CHAN / ZEN / SON BUDDHISM (1977-1992)" (http://www.humancomp.org/unichtm/zenbibl8.htl)

Each piece of data is parsed (in random order), and then split repeatedly. Each test last about 5 seconds before moving on to the next
The tests where run 10 times.

# Benches
The first table is the raw times. The second, is the time in percentage, relative to the CD1 run of the same string.

Note that ALL these tests take into account my first `isWhite` improvement.

ALSO: SCROLL RIGHT TO SEE THE LONG STRING TIMES

<table>
<tr><th></th><th>white1</th><th>white2</th><th>Hello</th><th>HW</th><th>HBBW</th><th>NHG</th><th>LI</th><th>Blackburn</th><th>Japanese</th><th>Nihongo</th><th>Chinese</th><th>Mongolian</th><th>Zenbibl8</th></tr>
<tr><th>C1</th><td>276</td><td>581</td><td>15732</td><td>30599</td><td>26312</td><td>8940</td><td>24963</td><td>11889</td><td>11344</td><td>18225</td><td>8487</td><td>6491</td><td>28116</td></tr>
<tr><th>C2</th><td>9161</td><td>9297</td><td>22474</td><td>23150</td><td>20836</td><td>11579</td><td>12296</td><td>6557</td><td>6703</td><td>12917</td><td>6812</td><td>3910</td><td>14978</td></tr>
<tr><th>C3</th><td>9159</td><td>9742</td><td>23439</td><td>24943</td><td>25384</td><td>12318</td><td>16109</td><td>10277</td><td>10352</td><td>21044</td><td>9491</td><td>6362</td><td>20336</td></tr>
<tr><th>C4</th><td>9436</td><td>10681</td><td>24640</td><td>28646</td><td>29209</td><td>24699</td><td>23021</td><td>15989</td><td>15818</td><td>37572</td><td>21161</td><td>11736</td><td>31902</td></tr>
<tr><th>CD1</th><td>9240</td><td>10299</td><td>24700</td><td>27161</td><td>29144</td><td>23760</td><td>20604</td><td>13720</td><td>13742</td><td>31479</td><td>17626</td><td>9458</td><td>28188</td></tr>
<tr><th>CD2</th><td>9230</td><td>10169</td><td>24172</td><td>26471</td><td>26652</td><td>22403</td><td>18171</td><td>11364</td><td>11409</td><td>26961</td><td>16453</td><td>7845</td><td>25223</td></tr>
<tr><th>CD3</th><td>9369</td><td>9975</td><td>24465</td><td>25940</td><td>26181</td><td>19007</td><td>17868</td><td>11546</td><td>11495</td><td>24910</td><td>9964</td><td>7266</td><td>23648</td></tr>
<tr><th>D1</th><td>759</td><td>2032</td><td>24068</td><td>27877</td><td>26645</td><td>22999</td><td>19673</td><td>12728</td><td>12844</td><td>29456</td><td>16437</td><td>8885</td><td>26596</td></tr>
<tr><th>D2</th><td>751</td><td>2039</td><td>25194</td><td>27330</td><td>24910</td><td>22512</td><td>17764</td><td>10783</td><td>10963</td><td>26110</td><td>15681</td><td>7642</td><td>24117</td></tr>
<tr><th>D3</th><td>757</td><td>2030</td><td>22741</td><td>28990</td><td>25382</td><td>20533</td><td>17668</td><td>10896</td><td>10976</td><td>23782</td><td>9327</td><td>7001</td><td>22727</td></tr>
<tr><th></th><th>white1</th><th>white2</th><th>Hello</th><th>HW</th><th>HBBW</th><th>NHG</th><th>LI</th><th>Blackburn</th><th>Japanese</th><th>Nihongo</th><th>Chinese</th><th>Mongolian</th><th>Zenbibl8</th></tr>
<tr><th>C1</th><td>314</td><td>664</td><td>34595</td><td>43943</td><td>34846</td><td>8933</td><td>40180</td><td>14071</td><td>13487</td><td>17363</td><td>4828</td><td>6983</td><td>30061</td></tr>
<tr><th>C2</th><td>11647</td><td>11870</td><td>27977</td><td>32578</td><td>27446</td><td>12401</td><td>22440</td><td>8574</td><td>8526</td><td>12207</td><td>3595</td><td>4418</td><td>16952</td></tr>
<tr><th>C3</th><td>11638</td><td>12357</td><td>28763</td><td>33628</td><td>31015</td><td>12286</td><td>26035</td><td>12061</td><td>11977</td><td>18705</td><td>4585</td><td>6505</td><td>21717</td></tr>
<tr><th>C4</th><td>11976</td><td>13230</td><td>30239</td><td>37018</td><td>35837</td><td>26990</td><td>32633</td><td>17218</td><td>16985</td><td>33342</td><td>13980</td><td>11165</td><td>32533</td></tr>
<tr><th>CD1</th><td>12610</td><td>13877</td><td>31227</td><td>38242</td><td>36360</td><td>25790</td><td>32635</td><td>17436</td><td>17131</td><td>31322</td><td>12015</td><td>10572</td><td>32028</td></tr>
<tr><th>CD2</th><td>11640</td><td>12740</td><td>29183</td><td>36256</td><td>34853</td><td>25665</td><td>30448</td><td>15166</td><td>14988</td><td>27250</td><td>10249</td><td>9239</td><td>28996</td></tr>
<tr><th>CD3</th><td>11635</td><td>12730</td><td>29367</td><td>36426</td><td>33798</td><td>25234</td><td>30435</td><td>15054</td><td>14841</td><td>26859</td><td>10158</td><td>9082</td><td>28459</td></tr>
<tr><th>D1</th><td>702</td><td>2017</td><td>31496</td><td>38070</td><td>33367</td><td>26212</td><td>31722</td><td>16424</td><td>16146</td><td>29728</td><td>11222</td><td>9900</td><td>30321</td></tr>
<tr><th>D2</th><td>705</td><td>2016</td><td>30276</td><td>38008</td><td>32687</td><td>25735</td><td>29920</td><td>14887</td><td>14662</td><td>26854</td><td>9803</td><td>9130</td><td>28543</td></tr>
<tr><th>D3</th><td>707</td><td>2014</td><td>28379</td><td>39396</td><td>32119</td><td>25503</td><td>29363</td><td>14427</td><td>14212</td><td>25701</td><td>9589</td><td>8635</td><td>27443</td></tr>
<tr><th></th><th>white1</th><th>white2</th><th>Hello</th><th>HW</th><th>HBBW</th><th>NHG</th><th>LI</th><th>Blackburn</th><th>Japanese</th><th>Nihongo</th><th>Chinese</th><th>Mongolian</th><th>Zenbibl8</th></tr>
<tr><th>C1</th><td>253</td><td>579</td><td>23423</td><td>42354</td><td>38555</td><td>9293</td><td>48346</td><td>12491</td><td>11704</td><td>15440</td><td>4100</td><td>6402</td><td>28908</td></tr>
<tr><th>C2</th><td>13433</td><td>13582</td><td>37773</td><td>30727</td><td>30788</td><td>13959</td><td>27824</td><td>7718</td><td>6902</td><td>10406</td><td>2897</td><td>3902</td><td>16241</td></tr>
<tr><th>C3</th><td>13373</td><td>13981</td><td>38644</td><td>33344</td><td>35157</td><td>14171</td><td>31677</td><td>11592</td><td>10650</td><td>18040</td><td>4370</td><td>6403</td><td>21123</td></tr>
<tr><th>C4</th><td>13277</td><td>14030</td><td>38825</td><td>34303</td><td>35055</td><td>28824</td><td>31737</td><td>11527</td><td>10660</td><td>19947</td><td>6993</td><td>6889</td><td>21843</td></tr>
<tr><th>CD1</th><td>13360</td><td>14289</td><td>38659</td><td>34416</td><td>37499</td><td>29300</td><td>35572</td><td>14201</td><td>13258</td><td>24995</td><td>9759</td><td>8502</td><td>27371</td></tr>
<tr><th>CD2</th><td>13380</td><td>14355</td><td>39450</td><td>34439</td><td>37544</td><td>29590</td><td>35298</td><td>14123</td><td>13215</td><td>24759</td><td>9174</td><td>8511</td><td>26969</td></tr>
<tr><th>CD3</th><td>13349</td><td>14202</td><td>38133</td><td>38536</td><td>38268</td><td>30330</td><td>34289</td><td>13032</td><td>12151</td><td>22689</td><td>8025</td><td>7864</td><td>25075</td></tr>
<tr><th>D1</th><td>566</td><td>1201</td><td>45246</td><td>38033</td><td>35802</td><td>29205</td><td>34964</td><td>13998</td><td>12890</td><td>24515</td><td>9239</td><td>8334</td><td>26443</td></tr>
<tr><th>D2</th><td>570</td><td>1193</td><td>33129</td><td>43180</td><td>36377</td><td>29947</td><td>34978</td><td>13484</td><td>12447</td><td>23544</td><td>8720</td><td>8017</td><td>26147</td></tr>
<tr><th>D3</th><td>564</td><td>1189</td><td>31797</td><td>46063</td><td>37140</td><td>30352</td><td>33870</td><td>12746</td><td>11778</td><td>22286</td><td>7664</td><td>7741</td><td>24128</td></tr>
<tr><th>DD</th><td>507</td><td>1117</td><td>29373</td><td>41209</td><td>32814</td><td>28484</td><td>30333</td><td>9925</td><td>9142</td><td>16931</td><td>5963</td><td>5895</td><td>19925</td></tr>
</table>

<table>
<tr><th></th><th>white1</th><th>white2</th><th>Hello</th><th>HW</th><th>HBBW</th><th>NHG</th><th>LI</th><th>Blackburn</th><th>Japanese</th><th>Nihongo</th><th>Chinese</th><th>Mongolian</th><th>Zenbibl8</th></tr>
<tr><th>C1</th><td>3%</td><td>6%</td><td>64%</td><td>113%</td><td>90%</td><td>38%</td><td>121%</td><td>87%</td><td>83%</td><td>58%</td><td>48%</td><td>69%</td><td>100%</td></tr>
<tr><th>C2</th><td>99%</td><td>90%</td><td>91%</td><td>85%</td><td>71%</td><td>49%</td><td>60%</td><td>48%</td><td>49%</td><td>41%</td><td>39%</td><td>41%</td><td>53%</td></tr>
<tr><th>C3</th><td>99%</td><td>95%</td><td>95%</td><td>92%</td><td>87%</td><td>52%</td><td>78%</td><td>75%</td><td>75%</td><td>67%</td><td>54%</td><td>67%</td><td>72%</td></tr>
<tr><th>C4</th><td>102%</td><td>104%</td><td>100%</td><td>105%</td><td>100%</td><td>104%</td><td>112%</td><td>117%</td><td>115%</td><td>119%</td><td>120%</td><td>124%</td><td>113%</td></tr>
<tr><th>CD1</th><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td></tr>
<tr><th>CD2</th><td>100%</td><td>99%</td><td>98%</td><td>97%</td><td>91%</td><td>94%</td><td>88%</td><td>83%</td><td>83%</td><td>86%</td><td>93%</td><td>83%</td><td>89%</td></tr>
<tr><th>CD3</th><td>101%</td><td>97%</td><td>99%</td><td>96%</td><td>90%</td><td>80%</td><td>87%</td><td>84%</td><td>84%</td><td>79%</td><td>57%</td><td>77%</td><td>84%</td></tr>
<tr><th>D1</th><td>8%</td><td>20%</td><td>97%</td><td>103%</td><td>91%</td><td>97%</td><td>95%</td><td>93%</td><td>93%</td><td>94%</td><td>93%</td><td>94%</td><td>94%</td></tr>
<tr><th>D2</th><td>8%</td><td>20%</td><td>102%</td><td>101%</td><td>85%</td><td>95%</td><td>86%</td><td>79%</td><td>80%</td><td>83%</td><td>89%</td><td>81%</td><td>86%</td></tr>
<tr><th>D3</th><td>8%</td><td>20%</td><td>92%</td><td>107%</td><td>87%</td><td>86%</td><td>86%</td><td>79%</td><td>80%</td><td>76%</td><td>53%</td><td>74%</td><td>81%</td></tr>
<tr><th></th><th>white1</th><th>white2</th><th>Hello</th><th>HW</th><th>HBBW</th><th>NHG</th><th>LI</th><th>Blackburn</th><th>Japanese</th><th>Nihongo</th><th>Chinese</th><th>Mongolian</th><th>Zenbibl8</th></tr>
<tr><th>C1</th><td>2%</td><td>5%</td><td>111%</td><td>115%</td><td>96%</td><td>35%</td><td>123%</td><td>81%</td><td>79%</td><td>55%</td><td>40%</td><td>66%</td><td>94%</td></tr>
<tr><th>C2</th><td>92%</td><td>86%</td><td>90%</td><td>85%</td><td>75%</td><td>48%</td><td>69%</td><td>49%</td><td>50%</td><td>39%</td><td>30%</td><td>42%</td><td>53%</td></tr>
<tr><th>C3</th><td>92%</td><td>89%</td><td>92%</td><td>88%</td><td>85%</td><td>48%</td><td>80%</td><td>69%</td><td>70%</td><td>60%</td><td>38%</td><td>62%</td><td>68%</td></tr>
<tr><th>C4</th><td>95%</td><td>95%</td><td>97%</td><td>97%</td><td>99%</td><td>105%</td><td>100%</td><td>99%</td><td>99%</td><td>106%</td><td>116%</td><td>106%</td><td>102%</td></tr>
<tr><th>CD1</th><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td></tr>
<tr><th>CD2</th><td>92%</td><td>92%</td><td>93%</td><td>95%</td><td>96%</td><td>100%</td><td>93%</td><td>87%</td><td>87%</td><td>87%</td><td>85%</td><td>87%</td><td>91%</td></tr>
<tr><th>CD3</th><td>92%</td><td>92%</td><td>94%</td><td>95%</td><td>93%</td><td>98%</td><td>93%</td><td>86%</td><td>87%</td><td>86%</td><td>85%</td><td>86%</td><td>89%</td></tr>
<tr><th>D1</th><td>6%</td><td>15%</td><td>101%</td><td>100%</td><td>92%</td><td>102%</td><td>97%</td><td>94%</td><td>94%</td><td>95%</td><td>93%</td><td>94%</td><td>95%</td></tr>
<tr><th>D2</th><td>6%</td><td>15%</td><td>97%</td><td>99%</td><td>90%</td><td>100%</td><td>92%</td><td>85%</td><td>86%</td><td>86%</td><td>82%</td><td>86%</td><td>89%</td></tr>
<tr><th>D3</th><td>6%</td><td>15%</td><td>91%</td><td>103%</td><td>88%</td><td>99%</td><td>90%</td><td>83%</td><td>83%</td><td>82%</td><td>80%</td><td>82%</td><td>86%</td></tr>
<tr><th></th><th>white1</th><th>white2</th><th>Hello</th><th>HW</th><th>HBBW</th><th>NHG</th><th>LI</th><th>Blackburn</th><th>Japanese</th><th>Nihongo</th><th>Chinese</th><th>Mongolian</th><th>Zenbibl8</th></tr>
<tr><th>C1</th><td>2%</td><td>4%</td><td>61%</td><td>123%</td><td>103%</td><td>32%</td><td>136%</td><td>88%</td><td>88%</td><td>62%</td><td>42%</td><td>75%</td><td>106%</td></tr>
<tr><th>C2</th><td>101%</td><td>95%</td><td>98%</td><td>89%</td><td>82%</td><td>48%</td><td>78%</td><td>54%</td><td>52%</td><td>42%</td><td>30%</td><td>46%</td><td>59%</td></tr>
<tr><th>C3</th><td>100%</td><td>98%</td><td>100%</td><td>97%</td><td>94%</td><td>48%</td><td>89%</td><td>82%</td><td>80%</td><td>72%</td><td>45%</td><td>75%</td><td>77%</td></tr>
<tr><th>C4</th><td>99%</td><td>98%</td><td>100%</td><td>100%</td><td>93%</td><td>98%</td><td>89%</td><td>81%</td><td>80%</td><td>80%</td><td>72%</td><td>81%</td><td>80%</td></tr>
<tr><th>CD1</th><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td>100%</td></tr>
<tr><th>CD2</th><td>100%</td><td>100%</td><td>102%</td><td>100%</td><td>100%</td><td>101%</td><td>99%</td><td>99%</td><td>100%</td><td>99%</td><td>94%</td><td>100%</td><td>99%</td></tr>
<tr><th>CD3</th><td>100%</td><td>99%</td><td>99%</td><td>112%</td><td>102%</td><td>104%</td><td>96%</td><td>92%</td><td>92%</td><td>91%</td><td>82%</td><td>92%</td><td>92%</td></tr>
<tr><th>D1</th><td>4%</td><td>8%</td><td>117%</td><td>111%</td><td>95%</td><td>100%</td><td>98%</td><td>99%</td><td>97%</td><td>98%</td><td>95%</td><td>98%</td><td>97%</td></tr>
<tr><th>D2</th><td>4%</td><td>8%</td><td>86%</td><td>125%</td><td>97%</td><td>102%</td><td>98%</td><td>95%</td><td>94%</td><td>94%</td><td>89%</td><td>94%</td><td>96%</td></tr>
<tr><th>D3</th><td>4%</td><td>8%</td><td>82%</td><td>134%</td><td>99%</td><td>104%</td><td>95%</td><td>90%</td><td>89%</td><td>89%</td><td>79%</td><td>91%</td><td>88%</td></tr>
<tr><th>DD</th><td>4%</td><td>8%</td><td>76%</td><td>120%</td><td>88%</td><td>97%</td><td>85%</td><td>70%</td><td>69%</td><td>68%</td><td>61%</td><td>69%</td><td>73%</td></tr>
</table>

# Interpretation

The first thing we see is that splitting on unicode is *NOT* cheap. However, each successive implementation speeds up the parsing. The final result is that my proposed unicode split is just as fast as the current ASCII split. Of course, it also means there is less room for improvement now...

The actual improvements, of course, depend on how heavilly the string relies on unicode: The Chinese Ulysses test has a 100% speed improvement over a simple decode though (!)

UTF-8 has the most gains, with consistent gains, and few deviation of results.
UTF-16 and UTF-32 has less consistent improvements, and more deviations from one test to the next. Still, they also gain for the changes.

We can see though that using decode for dchars is not a good idea, so I also provided my implementation in a basic loop pattern for dchars.

# Conclusion

There is, of course, a "amount of new code" vs "performance gain" tradeof. I am more than willing to remove/tame certain aspects of my code. Still, this is the full studdy of what I've been doing for the past 3 weeks, so I wanted to present it in its full form.