Fixes #6560 - Extract puppet parsing logic

Are all these methods mandatory (probably should be)? If so: we either a need a test that verifies that all classes that inherit from FactParser implement these methods, or do a runtime check (perhaps during instantiation?) that verifies that the interface is satisfied. 

Personally, I am strongly against this pattern (thowing exception when a method is not implemented), as you no longer can safely replace one interface implementation with another (violates Liskov substitution principle). Moreover, validation as above (or similar) would be more reliable (and less verbose).