Change Target::Features from a set of bitmask to a plain enumeration.

I also changed their order to group related features and added operators | and
|= to make the transition easier and simplify the notation when specifying
multiple features. I'm undecided whether this is a good idea or a more
explicit API using methods such as "set" or "add_feature" would be better.

Advantages:
- easier to reorder, add, and remove individual features
- has_feature(...) arguably easier to read and harder to get wrong

This uncovered the following bug in CodeGen_X86.cpp, which effectively
prevented packusdw instructions from being generated:

    if (!(target.features | Target::SSE41) && pattern.needs_sse_41) continue;

should probably have been

    if (!(target.features & Target::SSE41) && pattern.needs_sse_41) continue;
Merge branch 'master' into target_features
Move BitSet to Internal namespace
Explicitly mention that Features and to_string() must be updated together
Add BitSet::reset, change method names to match std::bitset
Merge branch 'master' into target_features
Merge pull request #445 from halide/target_features

Change Target::Features from bit masks to a plain enumeration.