Make MessageFactory options extendable

Currently, the options that get registered are tied to the `MessageFactory` class. If I extend it with `MyMessageFactory`, I should be able to register custom options like `MyMessageFactory::add_my_option`, and `MessageFactory::applyOptions` should recognize it, instead of throwing `[InvalidArgumentException]: "No method is configured to handle the my_option config key"`.