Name generation refactoring

Name generation refactoring: …
1) Make Smart and Base naming strategies independent in order to make behavior of Smart strategy consistent in all cases
2) Rename NamingStrategy to NameGenerator
3) Split NamedObjectFactory into
3.1) NameChecker which responsible for checking is name available in naming context i.e. EntityAttribute name within Entity
3.2) UniqueNameGenerator which in charge of returning unique name within passed naming context
4) refactor copy/past action in order to use introduced mechanism for name generation
5) move all classes responsible for name generation and checking into "naming" package