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
Yes it was originally proposed before ```@nogc```, but it makes sense to add it before merging.

> You can always just put @safe @nogc pure nothrow: at the top instead of repeating them for each method.

Are you sure? I tried declaring the template as
```
@safe pure nothrow
struct Flags(E, bool Force = false) if (Force || isFlagEnum!(E)) 
```

and remove the ```@safe pure nothrow``` from a method, but it compiles just fine if I stick a call to writeln() into it.