Revert "Revert "- use more let() statements instead of local scoping things""

This reverts commit 87c46c3345e0281fb89d8f48be1b5b3126be6f5d.
Make LogStash::Pipeline more multiple-instance friendly. I think there
was a bug that doing eval("def filter ...") would override the method
of all existing pipelines, which is bad.

Now filter and output implementations (from a pipeline) are compiled to
@filter_func and @output_func.
Fix a pretty bad bug (found by the tests, yay!) that allowed sharing of
default values (like hashes) across plugin instances. This bug only
really impacted tests, but was important to fix for the future where
logstash might support multiple pipelines (or reloads).
- can't yield in a lambda (the way we're doing things), give the block
instead.
- update to reflect new defaults (no tags by default and grok has
'singles' enabled by default)