UTF8 codec speedup

I made some changes to the encoder / decoder to use dramatically less objects. I ran the new unittest with the old and the changed implementation both with BENCHMARK_ROUND=100.
These are the results from object allocation:

```
Before change:
|  Type  |     GCed    | Living |
| byte[] | 125.027.983 |  3.130 |
| char[] |  86.371.696 |  2.250 |
| String |  43.185.652 |  1.446 |

After change:
|  Type  |     GCed    | Living |
| byte[] |      29.503 |     24 |
| char[] |      10.178 |     50 |
| String |       5.015 |     36 |
```