abstract factory has been implemented and tested
non-null return from factory is now assert-only checked; added doxygen