Allow to encrypt settings

This pull request adds a few things to settings:

* control structures for data, so we can control JSON underneath more easily, like: `settings.ssh_keys.create(name: 'foo', content: 'bar')`. Models for supporting these structures are defined by defining classes with fields definitions
* encrypting fields
* validations for models for settings
* `ssh_keys` - first collection for settings which allows to store ssh keys which are later sent to the worker

The work in this PR will be also used in `travis-api` for easy definitions of settings APIs.