Implemented a specialization of the MemoryBasedBatchGrammar and MemoryBasedTrie that permits efficient
lookup of nonterminal children using caching.

Efficient implementation of the method
public Iterator<Integer> getNonterminalExtensionIterator()
is implemented by storing the integer indices in a simple int array.
This is both memory and speed effective.
We had to also add a specialized version of MemoryBasedBatchGrammar
called MemoryBasedBatchGrammarEfficientNonterminalLookup
which overrides the method  protected MemoryBasedTrie createNewTrie()
as follows :

   @Override
  protected MemoryBasedTrie createNewTrie(){
    return new MemoryBasedTrieEfficientNonterminalLookup();       <============ Create the specialized trie instance
  }

so as to use the Trie specialization that implements the caching of the nonterminal indices.

       modified:   src/joshua/decoder/Decoder.java
       modified:   src/joshua/decoder/chart_parser/NonterminalMatcher.java
       modified:   src/joshua/decoder/ff/tm/hash_based/MemoryBasedBatchGrammar.java
       new file:   src/joshua/decoder/ff/tm/hash_based/MemoryBasedBatchGrammarEfficientNonterminalLookup.java
       new file:   src/joshua/decoder/ff/tm/hash_based/MemoryBasedTrieEfficientNonterminalLookup.java