Model adapters

**:warning: NOT READY TO MERGE :warning:**

I was really unhappy with how #52 turned out, so this is another attempt at supporting the use cases described in #42, #48, and #49.