Improvments in MetadataGenerator and ParserPoolHolder

#### Improved handling of concurrent reads and writes in ParserPoolHolder
* Made static field volatile so that the variable will have only one main copy which will be updated by different threads and modification by one thread to the volatile variable will immediately reflect to the other Thread.

#### Improved reusability of MetadataGenerator in custom implementations
* Extracted the validation of required attributes into separate protected method to be able to override it.
* Made return type of method 'buildSPSSODescriptor' generic by depending only on interface SSODescriptor to be able to override it in a custom implementation and renamed it to 'buildSSODescriptor'.