Adam/generalized draft import export 2

@dmitchell -- is this the right idea?

https://openedx.atlassian.net/browse/TNL-574
It's a shame you needed 2 impls of this. Granted the tuples are different.