New MTLModel interface to support multiple external representations

**:warning: NOT READY TO MERGE :warning:**

A new `MTLModel` interface that should handle the issues described in #42, #48, and #49.

CC @pizthewiz @matzew @terinjokes @gwynne