A pround optimization update:
- Significantly improved parsing speed by storing a vector of (nonterminal, nonterminal, probability) tuples to loop over. This is used in many places.
 (a) CKY decoding, max-marginal decoding, and inside computation: for each interminal a, loop over (b, c, prob) such that prob = p(a -> b c|a) > 0.
 (b) Outside computation: for each nonterminal a, (i) loop over (b, c, prob) such that prob = p(b -> a c|b) > 0, and (ii) loop over (b, c, prob) such that prob = p(b -> c a|b) > 0.
- The effect of the above optimization is the following (based on exhaustively parsing the first 393 sentences in the dev set):
 (a) CKY parsing time: 0.4-0.5 SPS => 0.2-0.3 SPS
 (b) Marginal parsing time: 3.0-3.5 SPS => 1.5-2.0 SPS
- Added the message printing aspect to the model.