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`

better to have
```
  match = size_str.match(/^(\d+\.?\d*)\s*(\S*)/)
  if !match
    log.error "Cannot parse size string: #{size_str}"
    raise "Cannot parse size string: #{size_str}"
  end
  size, unit = match.captures
  size = size.to_f
```