Use path instead of individually hard coded commands

Hey @fryguy

I understand we used to use the system PATH, but it had too many special cases and code around such a simple lookup. Using an internal PATH (much the way system daemons like cron and ssh do) seemed like a simpler and more resilient approach.

In order to do this, I needed to do some cleanup, so this PR took on a life of its own.

@jrafanie: let me know where you want me to split up the code into multiple PRs. As always, the commits represent the different blocks of work I performed.

Oh, and @jrafanie, it would have been delta -111 lines, but I added 45 lines in new specs. Let them eat :cake:!

**UPDATE:**
Notes on implementation:

- merged `Distros::Distro.local` and `Distors.local`, with more consistent rspec stubs.
- removed `Package` case statement in favor of inheritence in `Distro`
- remove `Distros.redhat` in favor of `rhel`, `fedora` and leveraged `Distros.all` instead of meta class fu
- removed `Distro` subclasses (e.g.: `RedHat`, `Fedora`), just use `Distro` instead.
- removed all the `Distro` constants like `COMMANDS` and just used instance variables instead. (aside: Something odd was happening with `RELEASE_FILE`)