Changed so regardless of whether args.multi and args.binary are set, the
same order of operations happens:
1. corpus read into test_instances, train_instances
2. if feature selection (args.score_fn and args.max_feat), words per category
   are extracted from the train_instances and score_fn is applied to select
   features and define featx
3. features are extracted from instances by applying featx

This order ensures that the corpus is only read once and that the feature
selection is only done over the training set (the classifier can be biased if
feature selection is done over the entire corpus).

Corpus is read differently based if args.multi and args.binary.
Depending on how the corpus is read test_instances and train_instances
are different data structures. category_words is defined based
on how the corpus is read.  extract_features is written to handle
both data structures.
separated out cross-fold execution path and added raising
an exception if trying to cross-fold a multi-binary classifier