User_artist relations save independent to artists (#19)

User_artist relations now save independent to artists. That is, they
save no matter the artists have already been saved or not to the
database before.
Echonest artist fetch on suggestion request (#15)

Echonest data for artists is now retrieved only when a user request a
suggestion and that particular picked artist does not have Echonest
data attached.
Bug fixes and refactoring
Added method that returns list of artist ids (#19)

Added a method that returns a list of artist ids given a list of artist
Facebook ids. Helper method used for saving user_artist relations.
Changed the behaviour of the Song class

The Song class now takes care of everything related to retrieving and
saving song data.
Refactored code
Enhanced Echonest Wrapper

Made some enhancements on the Echonest Wrapper:
- artists are searched by their facebook_id;
- only if this search fails, artists are searched by their name, as a
back-up before failing;
- songs are returned as a list of top 5 hotttessst; this way, failing
retrieving Soundcloud data will mean that no additional Echonest
requests will be made before declaring 'no songs by artist'.
Enhanced Soundcloud Wrapper

Made some enhancements on the Soundcloud Wrapper:
- songs greater than 2 minutes are searched now (formerly, there were
only 1);
- no more retrieving one random track; retrieve the most favorited
track that matches the search parameter.
Adapted models

Adapted models artist and song to the new wrappers.
The song model now gets a list of Echonest songs and checks each one of
these on Soundcloud before declaring 'no songs by artist' (so, no extra
Echonest calls).
Don't parse already parsed Facebook artists (closes #14)

Facebook artist likes don\t get parsed entirely anymore. After they are
fetched, only new artists are parsed, with parsing being stopped at the
encounter of the last inserted artist facebook_id.
Adapted database schema to reflect this.
Fixed bug where inserted user is not returned

Fixed a bug where the user that was inserted into the database is not
returned, thus blocking every subsequent request to that user.
Fixed some exception raising bugs
Wrappers return dictionaries (closes #24)
Improved exception handling

Improved the way exceptions are raised and treated.
Simplified exception reraising
Limited attempts to get a suggestion

There is a fixed limit of how many attempts should be made suggesting a
song before failing with an exception.
Merge pull request #29 from linkyndy/performance-improvements

Performance improvements