(maint) Don't assume processor facts are defined

If Facter cannot resolve the processors fact (eg Facter.value is stubbed
or the processors fact isn't implemented on a platform) we cannot always
assume that we have a hash. This commit changes the enumerated processor
facts to retrieve the processors fact and ensure that it's defined before
invoking methods on it.
(maint) Lazily evaluate and memoize processor implementation

Without this commit the processors fact will try to determine the OS
specific implementation when the fact is loaded, which triggers a lot of
side effects at load time. This commit converts the fact to lazily load
and memoize the object so that loading is deferred as much as possible.
Merge branch 'maint/master/processor-load-side-effects'