Split/add and fixes

As we discussed, for now, I've changed all my `isinstance(.., Locator)` calls to be duck-typing instead.
We still need to figure out our long-term approach for CourseKeys/UsageKeys and version support.