Btrfs support in space calculation (bnc#896176)

- pass `growonly` flag to libzypp when any snapshot is found
- use `btrfs filesystem df` instead of `df` (more accurate)
- Rubyfied and refactored the code before adding new features (was quite a mess)
- tested in the latest build - with a snapshot present the disk widget showed ~1GB less free space (the size of the snapshot), `btrfs filesystem df` reported 100MB less used space than `df`

Nice! Except `lines` keeps the newlines:
```ruby
irb(main):001:0> s = "a\nb\n"
=> "a\nb\n"
irb(main):002:0> s.split "\n"
=> ["a", "b"]
irb(main):003:0> s.lines
=> ["a\n", "b\n"]
```
You would think it does not matter here, but it does, in case the output consists of empty lines only, for whatever reason:
```ruby
irb(main):013:0> s = "\n\n"
=> "\n\n"
irb(main):014:0> s.split "\n"
=> []
irb(main):015:0> s.lines
=> ["\n", "\n"]
```