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
At one point this had three different values, only one of which was required.  Meant it was necessary to do stuff like:
```php
$foo = new Foo( 'value', null, true )
```
For most cases like this I prefer having the named parameters at the calling end rather than in the signature, e.g.:
```php
$foo = new Foo( [
    'term' => 'value',
    'isActive' => true,
] );
```
Probably better is to have config objects which when built and used *correctly* (I'm looking at you Search) make parameter passing a lot cleaner.

Since this is the only parameter now and we aren't going to be working on this any more, making $userRegion the single parameter makes sense.