make MR::Factory extendable

This changes how the mr factory methods are handled.  This change
allows you to extend `MR::Factory` onto your own custom factory
modules.  This is nice when you want to abstract away the fact that
you are using MR for factory handling or maybe want to extend the
capabilities of MR::Factory in a manageable way.

@jcredding ready for review.