Implemented dynamic sentence-level grammar filtering controlled with the "filter-grammar" parameter.

This required a change to the grammar interface, where the owner and spanLimit are now
properties of AbstractGrammar, instead of redundantly repeated in both the packed and
memory-based grammar implementations.

The filtering works by traversing the grammar trie with the sentence, building a new,
shadow-trie that's a subset of the original trie, but contains only paths that can be
traversed by the sentence being matched. For a small SAMT grammar, over 90% of the
grammar was removed, but at a net increase in running time. The hope is that with grammars
with high rank and rich nonterminal sets, the increased time needed to filter the grammar
will be offset by much less memory used from not seeding the DotChart with productions that
can never be completed.