String: reverted back to inout constructors.

* Refactored code and ctors to make it more robust.
* inout ctors don't work yet, but using const/immutable aliases
  is a good workaround for the time being.
* Changed one ctor into static itoa(), because of weird overload rules.
* Fixed icmp_(): return difference of lower-case letters.
* Removed unneeded sub_()const methods.
* Make use of int_t and uint_t for clarity.
* Forgot to remove last instance of .array in main.d.
* Added more unittest cases.