Handle various ignored errors

All ignored errors where found with the [`errcheck`](https://github.com/kisielk/errcheck) tool, I highly suggest to use this tool in your development environment. There are more errors found by errcheck that I was unsure about or didn't feel the need to ignore explicitly (such as `defer`'s and `.Close`'s).

Handle various errors that were implicitly ignored previously. Most of the changes are to explicitly ignore an error, there are a few exceptions:

`collectors/icmp.go:c_icmp` was using a [deprecated method](https://godoc.org/github.com/tatsushid/go-fastping#Pinger.AddHandler) of the `go-fastping` package. The change removed the error completely. 

`collectors/program.go:(*ProgramCollector).Run` had two separate code paths, one of them was ignoring errors. From what I could deduct it didn't seem to be intended, so I merged the two code paths into the one that handles errors.

`metadata/metadata_linux.go:metaLinuxIfaces` was using a variable defined outside of the callback function, I believe this allows it to add unintended(?) metrics if something weird happens. So I've moved it into the function.

This diff misses a few features in the existing version.

1. c.Interval could change on each run (a feature we may use in the future). This diff prevents that.
2. Programs with an interval set to 0 mean to run them forever and restart them if they halt. But they should not halt, and thus the info line is printed when they do. For programs with an interval > 0, they are expected to halt after a run, and thus no info line is desired.

I agree the error handling could be cleaned up, but we can't break the above things.