VID-2142 Create a way to clear the VideosModule Video Cache

* Refactored the VideosModule into different subclasses for each video sources
* Added cache purging code
* Incorporated James' AsyncCache changes
I wasn't implying this code was correct because the IDE says so, I was using the IDE as quick and visible stand in for how the compiler will react.  I think the difference between an Interface and Abstract class is pretty narrow.  I prefer the clarity the interface gives in that it only lists the methods the class must implement (rather than abstract methods buried in the 300 lines of ```Base```) but I can't see a reason why I would use this interface on a non-VideosModule\Module class, which I think is one of important reasons to use an interface.  I can make these abstract methods on this class.