Check the type of start in ContextFreeGrammar.__init__(): fixes #337

As discussed in #337. I've had a look at how argument checking is done in the rest of the code base now, and raising a `TypeError` seems to be in line with how incorrect arguments are usually dealt with.