[NX-450] Component Source API

JIRA: https://issues.sonatype.org/browse/NX-450
Keep wanting to call this `PullBasedComponentSource` or `PullableComponentSource` as it's been drummed into me that class names shouldn't contain verbs ;)