Performance improvement and fixes for invalid enum names, settable arrays, nullable string, pattern restrictions and global prefix

This patch contains the following changes:
* New NamespaceProvider
  * It caches the generated namespaces
  * More flexible search for matching namespaces with NamespaceKey() as global fall back
* Avoid invalid enum names by using an "Item" prefix (e.g. Item5)
* Settable arrays to be able to change their size
* GDay became Nullable<string> which isn't correct
* DataAnnotations may now be filtered depending on the targets capabilities
* Multiple pattern restrictions must be combined into one RegularExpressionAttribute
* When we have an "Elster" class and the root namespace is "Elster" too, we have to add a "global::" prefix to avoid compilation errors for the generated classes.