Repository pattern implementation

This PR applies the repository pattern design to the Component Eloquent model, and also breaks down the controllers into name spaced files.

- This allows the controllers to be tested in isolation. The repository methods can be mocked.
- Provides a single way to access a (in this case) Eloquent process.