Add Facter::Util::FileRead.read helper method

Without this patch, there isn't a robust and easy way to simply read the
contents of a file from within a fact's setcode block.  This is a
problem because it encourages the use of
Facter::Util::Resolution.exec('cat ...') which is a bit heavy for this
purpose.

This patch addresses the problem by adding a new utility method and
module intended to simply read and return the contents of a file.  If
the file is inaccessible or does not exist then the method logs a debug
message and returns nil.
Add expectations for operatingsystemrelease on Ubuntu

Without this patch, there are no examples of the expected behavior of
the operatingsystemrelease fact for Ubuntu.  This is a problem because
it is unclear if the fact's value should contain the patch version in
addition to the major and minor version.

This patch fixes the problem by adding an RSpec example that clearly
specifies the operatingsystemrelease fact should only contain the major
and minor version and not the patch version.  If this behavior changes
in the future this example will fail to pass.

See https://github.com/puppetlabs/facter/pull/278 for the decision.
Merge branch 'maint/1.7.x/useless_use_of_cat' into 1.7.x

* maint/1.7.x/useless_use_of_cat:
  Add expectations for operatingsystemrelease on Ubuntu
  Add Facter::Util::FileRead.read helper method
Merge branch '1.7.x' into 2.x

* 1.7.x:
  Add expectations for operatingsystemrelease on Ubuntu
  Add Facter::Util::FileRead.read helper method
Merge branch '2.x'

* 2.x:
  Add expectations for operatingsystemrelease on Ubuntu
  Add Facter::Util::FileRead.read helper method
Updating FACTERVERSION for 1.6.15-rc1
Merge branch '1.6.x' into 1.7.x
Merge branch '1.7.x' into 2.x

Conflicts:
	lib/facter/version.rb
Merge branch '2.x'
(#17840) Use enum_cpuinfo for x86 arch

Windows and Gentoo consider 32 bit x86 architectures to be called 'x86',
but this value was not handled when checking for processorcount
information. This patch adds x86 alongside the other synonyms for this
architecture.
Merge branch 'adrienthebo-ticket/1.6.x/17840-enum_cpuinfo-on-x86' into 1.6.x

* adrienthebo-ticket/1.6.x/17840-enum_cpuinfo-on-x86:
  (#17840) Use enum_cpuinfo for x86 arch
Merge branch '1.6.x' into 1.7.x

* 1.6.x:
  (#17840) Use enum_cpuinfo for x86 arch

Conflicts:
	lib/facter/util/processor.rb
Merge branch '1.7.x' into 2.x

* 1.7.x:
  (#17840) Use enum_cpuinfo for x86 arch
Merge branch '2.x'

* 2.x:
  (#17840) Use enum_cpuinfo for x86 arch
(maint) Remove processor_spec duplicate stubbing

The Facter::Util::Processor spec had a number of repeated stubs that
were merged with expectation blocks. This commit moves the expectations
into before blocks and uses example groups to scope the stubbing.
Merge branch 'adrienthebo-maint/1.6.x/processor_spec_stubs' into 1.6.x

* adrienthebo-maint/1.6.x/processor_spec_stubs:
  (maint) Remove processor_spec duplicate stubbing
Merge branch '1.6.x' into 1.7.x

* 1.6.x:
  (maint) Remove processor_spec duplicate stubbing
Merge branch '1.7.x' into 2.x

* 1.7.x:
  (maint) Remove processor_spec duplicate stubbing
Merge branch '2.x'

* 2.x:
  (maint) Remove processor_spec duplicate stubbing