(PUP-1846) File content diffing should respect loglevel

The current behavior is to log all diff output on file content changes
(if show_diff is set) at the info level, rather than the loglevel of the
resource.

This change alters the behavior to log at the same loglevel as the file
resource.
Merge branch 'pr/2410'

* pr/2410:
  (PUP-1846) File content diffing should respect loglevel
Merge pull request #2417 from zaphod42/issue/master/pup-1839-incorrect-settings-when-using-puppet-device

(PUP-1839) Introduce overridden defaults
(PUP-30) Add foundation for heredoc and epp (parser and model)

This adds the foundation for support of heredoc and epp. The heredoc
is at this point functional but does not get location information
right since sublocator needs to be supported by the HeredocExpression.

EPP is untested.
(maint) Add eAllContainers enumerator to Containment

This utility enumerator makes it easier to find containing objects.
(PUP-30) Add SubLocatableExpression to handle "embedded" expressions

This expression helps with handling areas of the source that requires
douple/separate lexing (heredoc, etc). It establishes a context
from which its children can resolve their offsets.

This is requires to make the offset calculations fast (no need to
relocate them). Instead the relative location is captured in a
SubLocateableExpression.
(PUP-30) Add support for the SubLocatableExpression

This adds (part) of the support for SubLocatableExpression.
This expression can now be evaluated, and its locator will be found
by its children when they are searching for a locator.
(PUP-30) Add SUBLOCATE token to lexer to communicate subspace

This token is needed since everything inside the heredoc lives in
its own location space and needs to be anchored inside something.
This token achieves this by giving the parser it needs (offset and
length of the text from which heredoc is extracted).
(PUP-30) Complete implementation of sublocated expression

This completes the implementation of SubLocatedExpression. The
SubLocator refactored to Locator (instead of being nested inside
the support for Heredoc). Heredoc lexing, and the grammar now
cooperate to ensure that sublocated model is wrapped.
(maint) Fix issue when issure report was called without issues

All earlier code paths checked if there were errors before calling
assert and report. There was an issue with a reference to a
non eisting variable when there were no errors to report.
(maint) Fix missing argument in BindingsModelDumper

This fixes a typo (missing argument) in one of the dumper's methods.
(maint) Speed up External Syntax Check if there are no errors

There is no need to go through the motion of configuring an
error issuer and letting it do all its work when it will not report
anything.
(PUP-30) Add tests for heredoc at parser and evaluator levels

This also fixes issues found by running the new tests and
debugging them.
(maint) Correct spelling in comments
(PUP-30) Make epp parser emit EPP_START, and generate Program

Parsing EPP now results in a Program model (if producing only
an EppExpression there are no source code references).
The EPP_START tokten was not emitted (and its precence was not
tested for).
(PUP-30) Add tests for epp parser and make them pass

This adds tests for parsing epp. A typo was corrected when checking
for unbalanced <% %> at the end of the epp input. This caused error
not to be raised.

(Tests should have been included in an earlier commit).
(PUP-30) Add call-by-value of closure in evaluator

This is needed for calling epp templates, but is also a useful evaluator
extension in general as it allows calling any lambda with matching of
parameter names (instead of call by args position).
(PUP-30) Rename epptemplate and inline_epptemplate to use 'epp'

This renames the two epp functions - epptemplate and inline_epptemplate
to use the shorter versions epp, and inline_epp.
(PUP-30) Complete implementation of functions epp, and inline_epp

This completes the impelmentation of the functions epp, and inline_epp
that provides the "puppet templates" functionality.
(maint) Fix scope.find_global_scope when running tests

When running tests there is no global scope (top or node), in that
case consider the only existing scope to be the top scope.