Added all builders into a make namespace
Pulled out a small bit of utility code for composite rules
CatchingRule no longer depends on RuleTraits being available
AlternativeRule no longer depends on RuleTraits

I also refactored it to work like SequenceRule does now
DiscardRule no longer depends on RuleTraits
MultipleRule no longer depends on RuleTraits
minor formatting
minor reorg
Added operator<< for Result
Added a way to quickly wrap lambdas so that they're recognized as rules

This complements the new efforts to make rules less dependent on taking
real rules as arguments. Of course, it's not essential to use this, but
it does keep the code a bit cleaner by keeping template arguments close
to the definition of that rule.
Reducerule no longer depends on RuleTraits being available
Removed the insert() method from AlternativeRule; just provide operator<<
Ensure proxyAlternative refers properly to populate()
Lots of refactors to SequenceRule

First, I removed the "Optional" stream manipulators, as the new rule
function signature is sufficient to keep that behavior external to
Sequence. Removing this data allowed me to remove the RuleEntry struct
entirely, which flattens a bunch of code.

I also changed SequenceRule to behave like the other composite rules. As
a result, I was able to use the composite.hpp's populate() instead of
rolling my own here.
SequenceRule no longer depends on RuleTraits
Changed RuleTraits to use <Input, Token>

This allows it to be used everywhere a rule is expected. It also cleans
up every rule we have by allowing it to be inherited.
Minor tweaks to a discard test

The lambda wasn't actually saving any real results, so this would shadow
the real behavior that we're expecting from DiscardRule
Added OptionalRule

The implementation for this rule is incredibly simple, as it just runs
the rule and returns true regardless.

I pondered creating a rule that always returns false, but I don't see a
real need for it in practice.
MultipleRule must match at least once to return true

This makes MultipleRule behave like the + operator in regular
expressions, rather than the * operator. To return to the old
zero-or-more behavior, use OptionalRule:

auto rule = make::optional(
        make::multiple(
                OrderedTokenRule<char, std::string>("Cat", "Heathen")
        )
);
Renamed sproutbenchmark to just benchmark, made it noinst