Improve separation of concerns
The huge nameprep database, which partially exists in two different versions due to changes between IDNA 2003 and IDNA 2008 has been extracted from the core class. The same goes for the actual Punyocde algorithms. Thus there's now the IdnaConvert class, which still is the public interface, the Punycode class for the core algorithm and the NamePrepData classes for IDNA 2003 and 2008 respectively. Since IDNA 2003 is only still supported for historic reasons, NamePrepData is the leading class and NamePrepData2003 just extends it. Both implement the NamePrepDataInterface for easy dependency injection. Also there's now the PunycodeInterface and the UnicodeTranscoderInterface for the same reason.
Showing with 3079 additions and 3075 deletions