The general contract between a class that generates unique
identifiers and the Session. It is not intended that
this interface ever be exposed to the application. It is
intended that users implement this interface to provide
custom identifier generation strategies.
Implementors should provide a public default constructor.
Implementations that accept configuration parameters should
also implement Configurable.
Implementors must be threadsafe