Introduced AbstractStringConverter and some refactoring

* Added preconditions to public method arguments
* The value to be approved should have been nullable
* AbstractStringConverter will make it easier to introduce a StringConverter which is most of the usecases