Added HMM tagger with Viterbi algorithm

Viterbi algorithm is implemented a bit different than within the
standard NLP lectures. It calculates pi(k, y(k-1), u(k)) and stores
each possible combination of tags (k-1), u(k), building matrix for each
k. Finally when it reaches end it knows which y(n+1) is the best tag
for: STOP (end of the sentence is reached) and then it finds the best
y(n) through pi(n+1, y(n+1), y(n). When it finds out y(n), it goes down
to pi(n, y(n), y(n-1)) and finds arg max (y(n-1)) for that one (in
other words, y(n-1)) and finally it ends up with pi(2, y(2), y(1))