configuration clean up 

# Configuration cleanup

While working on stories:

* As a developer, I would like to katello.yml is always correctly loaded
* As a developer, I would like to katello.yml be loaded only once
* As a developer, I would like to config/katello.yml be preferred before /etc/katello/katello.yml
* As a developer, I would like to katello.yml not to be in git repository.

I was not able to do that with the old implementation so I've cleaned it up. I've also added some goals of my own:

* remove unnecessary `database.yml`
* to have single global access point to Katello configuration: `Katello.config`
* no environment variable (`ENV`) usage in Katello source code (inlined in katello.yml file if needed)
* make Katello configuration independent to any gem (can be used anywhere even in Gemfile or stand-alone)
* fail early if miss-configured (configuration is validated) 
* stay compatible with old AppConfig API
* cleaner implementation

## Introduced incompatibilities

* `config/katello.yml` is removed from repository and ignored by git, there is `config/katello.template.yml` instead

## Todos before merge

* √ test and fix rpm build
* √ test and fix katello-configure
* √ fix travis (add `cp katello.template.yml.default to katello.yml`)
* fix upgrade scenario with new configuration

## Notes

### Commit message

clean up configuration

As a developer, I would like to katello.yml is always correctly loaded
As a developer, I would like to katello.yml be loaded only once
As a developer, I would like to config/katello.yml be preferred before /etc/katello/katello.yml
As a developer, I would like to katello.yml not to be in git repository.
remove database.yml
centralize Katello configuration
remove ENV usage from code, use configuration instead

### Documentation form source code

Katello::Configuration module contains all necessary code for Katello configuration.
Configuration is not dependent on any gem which allows loading configuration very early (even before Rails). Therefore this configuration can be used anywhere (Gemfile, boot scripts, stand-alone)
  
Configuration access points are methods #config and #early_config, see method documentation.
There are shortcuts defined: `Katello.config` and `Katello.early_config`
  
Configuration is represented with tree-like-structure defined with Configuration::Node. Node has minimal Hash-like interface. Node is more strict than Hash. Differences:

* If undefined key is accessed an error NoKey is raised (keys with nil values has to be defined explicitly).
* Keys can be accessed by methods. `config.host` is equivalent to `config[:host]`
* All keys has to be Symbols, otherwise you get an ArgumentError
  
AppConfig will work for now, but warning is printed to `$stderr`.
  
Some examples

    # create by a Hash which is converted to Node instance
    irb> n = Katello::Configuration::Node.new 'a' => nil
    => #<Katello::Configuration::Node:0x10e27b618 @data={:a=>nil}>
  
    # assign a value, also converted
    irb> n[:a] = {'a' => 12}
    => {:a=>12}
    irb> n
    => #<Katello::Configuration::Node:0x10e2cd2b0 @data=
         {:a=>#<Katello::Configuration::Node:0x10e2bcb40 @data={:a=>12}>}>
  
    # accessing a key
    irb> n['a']
    ArgumentError: "a" should be a Symbol
    irb> n[:a]
    => #<Katello::Configuration::Node:0x10e2bcb40 @data={:a=>12}>
    irb> n[:not]
    Katello::Configuration::Node::NoKey:  missing key 'not' in configuration
  
    # supports deep_merge and #to_hash
    irb> n.deep_merge!('a' => {:b => 34})
    => #<Katello::Configuration::Node:0x10e2cd2b0 @data=
         {:a=>#<Katello::Configuration::Node:0x10e2a64d0 @data={:a=>12, :b=>34}>}>
    irb> n.to_hash
    => {:a=>{:a=>12, :b=>34}}