Add Flags template

Flags is a typecons template for storing OR combinaton of enum values in a type safe fashion.

I think that the possibility to use bitwise operation on enums is a bit of a hole in D type system;
Flags provides a type safe alternative modeled after Qt's Q_FLAGS
Uh, I thought I had answered this yestertday but I must have forgotten to click on comment...
You need the cast to make these lines work:
```
assert(flags_A & flags_AB);
assert(flags_AB & Enum.A);
```