Pass model config as Outputs object instead of str

These objects have some keys, such as 'type' and 'name', which allows
our output model to discriminate on them.

If ios.rb contains this:

  cmd 'show ip cef' do |out|
    { output: out, type: 'poop' }
  end

  cmd 'show process cpu' do |out|
    { output: out, type: 'poop' }
  end

  cmd 'show memory statistics' do |out|
    { output: out, type: 'poop' }
  end

Our git output looks like this:

[ytti@ytti.fi ~/.config/oxidized]% git clone oxidized.git
Cloning into 'oxidized'...
done.
[ytti@ytti.fi ~/.config/oxidized]% git clone poop.git
Cloning into 'poop'...
done.
[ytti@ytti.fi ~/.config/oxidized]% ls poop
bu.ip.fi--show_ip_cef  bu.ip.fi--show_memory_statistics  bu.ip.fi--show_process_cpu
[ytti@ytti.fi ~/.config/oxidized]% ls oxidized
bu.ip.fi
[ytti@ytti.fi ~/.config/oxidized]%

Where oxidized repo contains standard config for all unspecified types (type is
then 'cfg'), for all specified types instead of collapsing it into single
string, we store them in 'type' repo with filename including 'name' of the
command.
Keep config as Oxidized::Config instead of hash

The model will look like this:

  cmd 'show ip cef' do |out|
    out.type = 'poop'
    out
  end

  cmd 'show process cpu' do |out|
    out.type = 'poop'
    out
  end

  cmd 'show memory statistics' do |out|
    out.type = 'poop'
    out
  end

I think it's cleaner.
refactor cfg as object

- now default type is 'nil', which is collapsed to flat config via
  Outputs#to_cfg

- if type is not 'nil' then name is automatically set if not set by
  model

- if name and type is set, separate file is created

- if name is not set, but type is set, outputs from type are collapsed
  as with 'nil' types

This model:
  cmd 'show ip cef' do |out|
    out.type = 'poop'
    out.name = false
    out
  end

  cmd 'show process cpu' do |out|
    out.type = 'poop'
    out.name = 'my_cpu'
    out
  end

  cmd 'show memory statistics' do |out|
    out.type = 'poop'
    out.name = false
    out
  end

  cmd 'show ip bgp summary' do |out|
    out.type = 'poop'
  end

Would produce git output:
[ytti@ytti.fi ~/.config/oxidized]% ls poop
bu.ip.fi  bu.ip.fi--cpu  bu.ip.fi--show_ip_bgp_summary
[ytti@ytti.fi ~/.config/oxidized]%

bu.ip.fi contains the collapsed stuff
bu.ip.fi--cpu is manually named
bu.ip.fi--show_ip_bgp_summary is automatically named
Merge branch 'master' into cfg_as_object
update changelog
Merge branch 'master' into cfg_as_object
Support type_as_directory for git output

If set to true, repo will have directory matching model type, instead of
new repo.
fix pre/post blocks
Merge branch 'master' into cfg_as_object
don't commit empty config in git output
don't commit empty type configs
never accept empty config in commit
Merge branch 'master' into cfg_as_object
Merge branch 'master' into cfg_as_object
Closes #35
Merge branch 'master' into cfg_as_object
Merge branch 'master' into cfg_as_object
Merge branch 'master' into cfg_as_object