Work on abstracting mtl directives

Add MtlDirective type, constants

Add skeleton of directive switch for all defined directives
Mtl: Instead of ignoring unknown directives, store them as strings
Make Mtl parser API more flexible

Also change 'pieces' terminology to 'words' for obvious reasons
Clean up types, put them in their own package