Extract common code into Resources

A resource is an abstraction for channels, videos etc.
They all have a "parent" and an optional auth.

No new functionalities, just refactor.
Merge branch 'extract-resources'