Get "Find a song" scenario to pass.

  - Introduced a test catalogue
  - Extract create_song factory method
  - Separate commands and queries by returning self from commands
  - Encapsulate results within TestUI
Add guard for cucumber
Move driver code to support directory.
Move app code to lib directory
Rename TestCatalogue => FakeCatalogue
Use a Virtus::ValueObject for Song

  - this forces Song to be immutable
Add failing scenario for unkown song

  - with step definitions
  - need to unit test FakeCatalogue now, which will drive us to organise
    the project structure
Add guard-rspec
Add an rspec example for the existing behaviour of FakeCatalogue

  - Next up - need to ensure only matched songs are returned
Add example to start driving out a working #search method on FakeCatalogue

  - Cucumber scenario still fails, showing us we need to add more behaviour
Drive out details of FakeCatalogue#search

  - this makes the cuke pass, but shows that we still need to do
    more unit testing. For example, the search is case sensitive,
    and we're only searching on song title.
No matching song scenario is now green.

  - Check for no results notification showing on TestUI.
  - Highlights that we are just sending result set to UI, we need to add
    another observer, e.g. notifications to force Tell style.
Refactor specs to remove duplication
Refactor tests to share create_song
Start creating integrated spec for SpotifyCatalogue

  - Created a SpotifyCatalogue::SongBuilder
Integrate SpotifyCatalogue with Spotify

  - Use RestClient to get data
  - Update with better test cases (based on spotify data)
Move SpotifyCatalogue into main app code
Add VCR to cache Spotify's responses for testing

  - this is arguably unecessary, since we're already got a FakeCatalogue,
    but we are now integrating with the web, and this just allows us to refactor
    and work with our integration tests without actually hitting the web each
    time.
Refactor to use same specs for FakeCatalogue and SpotifyCatalogue
Refactor specs