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 think I'm the one who wrote this logic originally. It's kind of hard to understand. What if we updated to:
```php
	protected function canAddVideo( array $video ) {
		return (
			!$this->isRegionallyRestricted( $video ) &&
			!$this->isBlackListed( $video )
		);
	}
```
?