Add proper parsing to lesson 3.

The previous approach of zipping blob.words.lemmatize() and blob.pos_tags
was unreliable, since it is not guarranteed that both have exactly the same
length. Under rare circumstances, the lists would shift, making the result
useless.

The new approach uses the parse() method and wraps the output in a
namedtuple.