(FACT-233) support nmcli >=0.9.9 syntax

Adding support for nmcli version >= 0.9.9 that ships in Fedora 20 and RHEL7.
Merge pull request #677 from ChrisPortman/dhcp_servers_new_nmcli

 (FACT-233) support nmcli >=0.9.9 syntax
(fact-233) Pass '-f all' to nmcli to ensure the dhcp_server field is available

Prior to this change 'nmcli d' was invoked without specifying which
fields were needed. This happened to work on fedora 19 and fedora 20,
but doesn't work on redhat 7, which defaults to return a restricted
set of fields for devices.

This patch specifies '-f all' to nmcli so that all fields are returned.
I've tested this change on all 3 of the above distros. It works on all 3
and doesn't seem notably slower (I had some concern that maybe this would
cause a slowdown, so wanted to check that out.)
(FACT-233) Fix nmcli version detection for DHCP server fact.

Previously, we were doing a simple "to_i" on the extracted version
string from nmcli to determine which command line syntax to use.  If the
version was greater than 0.9.9.0, we need to use the "show" command
instead of the "list" command.  This was done by checking the result
against 990 ("0990".to_i, meaning version "0.9.9.0").

However, this won't work with version strings such as "0.9.8.10" since
"09810".to_i > 990.

The fix is to extract the version components of the string and
explicitly check against version 0.9.9.0 or higher.
Merge pull request #684 from peterhuene/fact/233

(FACT-233) Fix nmcli version detection for DHCP server fact.
(FACT-482) Remove thread locking

Facter has sporadic instances where facts implement their own locking
when resolving facts. Facter itself has never made any guarantees about
thread safety so the existing locking is useless at best and broken at
worst.

When Mcollective resolves facts it acquires a threadlock before running
to ensure that facts are generated in an atomic fashion. However the
lock used is not scoped to the given critical region; it is global so
`Thread.exclusive` cannot be reentered in a single thread:

    [3] pry(main)> Thread.exclusive do
    [3] pry(main)*   Thread.exclusive do
    [3] pry(main)*     puts "hi"
    [3] pry(main)*   end
    [3] pry(main)* end
    ThreadError: deadlock; recursive locking
    from <internal:prelude>:8:in `lock'

Because of this the facter facts source could not be used on Windows
because Mcollective and Facter would deadlock. This commit removes the
locking from Facter and places the responsibility for thread safety on
the code invoking Facter.
Merge pull request #688 from adrienthebo/issue/facter-2/fact-482-remove-thread-locking

Issue/facter 2/fact 482 remove thread locking
(FACT-484) check dmi sysfs file for readability instead of just existence

Retrieving the virtual fact without root privileges would yield
warning messages due to missing permissions on
/sys/firmware/dmi/entries/1-0/raw (at least on certain versions of Debian).

The readable? query makes more sense than exists? at this point, anyway.