Move settings to Travis::Settings and make it more agnostic

This commit achieves a few things:

* we don't need to pass "repo" to settings, we just use agnostic
  callback. This is better in my opinion, because it's not repo specific
  and it's not even specific to AR records
* settings can be used in other classes as well, there was an idea to
  add a few settings to user, it will be probably the easiest way to use
  the same code I used for repository
* I refactored settings code to remove legacy approach. First version of
  settings was added as a thin wrapper over hash. After a while I
  switched direction to use more structured approach with collections
  and I also tried to make external API in a way we can change internals
  more easily
Updte structure.sql
Refactor Repository::Settings to use virtus

When I started work on settings I came up with my own simple
implementation for an API over JSON structure we keep in the DB. After a
while it turned out that my code would require more modifications to
allow abstracting more struectures. For example, settings code can
contain collections. For notifications it would be cool if models also
contained collections (like: campfire settings have rooms). In order to
minimise code that I need to use for this purpose I changed my
implementation to use Virtus, which already has most of what we need.
Don't automatically add id to all settings models

It doesn't really make sense for "singleton" models like Campfire global
settings, it's better to declare id everywhere when we need it.
Remove ssh_keys and leave just one ssh_key

When I was adding ssh_keys I thought the intention is to allow
supporting multiple ssh_keys. It turned out it's not the case and we
want to allow setting only one ssh key.