Revise the Generic_Factory code to use Traits approach

Rather than adding in a new template parameter, this approach uses
Traits classes to work.

The Traits class and associated helper classes are now added to the
code.  Factory_Pointer_Traits will obtain the desired return type from
one of the following 3 sources:
- A specialization of Factory_pointer_traits, for the AbstractType
- An alias, added inside of AbstractType declaration, for the type
  Pointer_Type
- The default type -- Shared_Pointer<T>

This appears to work beautifully.

It is expected, due to the nature of how the Factory class will be used,
that the 2nd option above will be the primary means of specifying the
type of pointer returned.  In other words, There should be a typedef or
using statement to define the Pointer_Type.  This needs to be converted
into a macro in the not-too-distant future, as this code is a little
verbose and well-suited to a macro

Finally, a couple minor fixes and cleanups:
- remove some unneeded lines of commented-out code
- fix spelling / capitalization errors
Add Macro to simplify AbstractClass declaration
Additional clean-up of Generic_Factory code

Move the aux. helper classes to a separate internal namespace, so that
they don't get in they way (especially with IDE autocomplete, etc.)
Merge branch 'feature/Traits'

Conflicts:
	Generic_Factory.h