Add a more memory efficient version of DictVectorizer

When loading really large files for SKLL, I found that temporarily storing a list of dictionaries to pass to DictVectorizer was frequently using up huge amounts of memory.  With `UnsortedDictVectorizer`, you can call `fit_transform` with a generator, and not have to waste the temporary space.

This sub-class also overrides `fit` so that the feature names are not sorted in that case either for consistency.

I would have just modified the `DictVectorizer` class to no longer sort the list of feature names, but I didn't want to break anyone's code that somehow relied on that.
On second thought, since we still only want to append `f` to `self.feature_names_` if it isn't in `vocab`, it's an unnecessary complication.  As it currently is written it's easier to follow.

```python
                if f not in vocab:
                    self.feature_names_.append(f)
                # vocab[f] will be len(vocab) after next line
                indices.append(vocab[f])
```

seems a lot less clear than

```python
                if f not in vocab:
                    self.feature_names_.append(f)
                    vocab[f] = len(vocab)
                indices.append(vocab[f])
```