Update machines to use Factory.forProtocol method.

This means that defining Factory objects for each protocol is
unnecessary, allows the code to be shorter. Simple parameters like
delimiter can be passed as an argument without having to subclass the
protocol.