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/165e485cebf0b1dd685ad94a8f721a2de9d8e1a1 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/312db0eac15f963f787c3e6378dedc301e08ee2b Use appender in split. Makes it faster as early as the second token.
4. https://github.com/monarchdodra/phobos/commit/3950b148088339c47f4b55d239a80228d1c2ed3e Making split it unicode.
5. https://github.com/monarchdodra/phobos/commit/8d77dd5ed249da8363d46033c4efce776ee634ec Unittest
6. https://github.com/monarchdodra/phobos/commit/9573699a40d25cb8291e288e83d3dced07f9cb6f New implementation for split. Faster as a whole.
7. https://github.com/monarchdodra/phobos/commit/5dcd9e30e99838ad40144c5aad83ac0a9398706d Introducing the (internal) function decodeIsWhite: It does both operations at once, giving a good boost to performance.
8. https://github.com/monarchdodra/phobos/commit/29a67e171c96144d49deb9a85259f64a419ce181 decodeIsWhite unittests
9. https://github.com/monarchdodra/phobos/commit/358891200b02bf8bad1fdce27c62e6fb9d263fad Deploying it in decodeIsWhite stripLeft
10. https://github.com/monarchdodra/phobos/commit/bf91f5c29a7e17f743ddf36f3d9ae457f4b738dd Deploying decodeIsWhite in decodeIsWhite split
11. https://github.com/monarchdodra/phobos/commit/59562d6b11fb2a2000158074f1f9fc5c61830b11 More aggressive implementation of decodeIsWhite
12. https://github.com/monarchdodra/phobos/commit/b7433c1de119dd3785950a7439a97a909811ce06 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.