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`

that is wrong reduce usage: 
```
irb(main):004:0> [0, 1].reduce(0) { |a, i| a += 1 unless i == 1 }
=> nil
```
it should be
```
used = df_info.reduce(0) do |acc, line |
  size = line[/used=(\S+)/, 1]
  size = size ? size_from_string(size) : 0
  acc += size
end
```