Devectorize flags in favor of bitwise operators

This is a proposal based on #76. Please note that this PR includes **breaking changes**.

I opted not to take the enum route for a number of reasons. Instead, I'm using a thin wrapper struct with a single field. The width of the struct is configurable, but it defaults to `u32`. An enum is larger - at least 8 bytes due to the constructor on `___Raw(...)`. The wrapper struct also eliminates the need to duplicate the flags into a `to_ll()` function since each wrapper carries its own numerical representation. Thanks to SiegeLord (RustAllegro) for the idea.

These changes eliminate the marshaling code required to convert vectors to integers and vice versa. The resulting code is much easier to follow.

### Migration guide
Affected functions are:
* `sdl2::init`
* `sdl2::init_subsystem`
* `sdl2::quit_subsystem`
* `sdl2::was_inited`
* `sdl2::keyboard::get_mod_state`
* `sdl2::keyboard::set_mod_state`
* `sdl2::mouse::get_mouse_state`
* `sdl2::mouse::get_relative_mouse_state`
* `sdl2::render::Renderer::from_window`
* `sdl2::render::Renderer::new_with_window`
* `sdl2::surface::Surface::new`
* `sdl2::video::Window::get_flags`
* `sdl2::video::Window::new`

Any functions that previously took a vector of flags now take a bitset that you can compose using bitwise operators. Old-style `[A, B, C]` is now `A | B | C`.

Any functions that previously returned a vector of flags now return a bitset in the same fashion. You can extract individual flags using bitwise operators. Old-style `flags.iter().any(|f| f == Fullscreen)` is now `flags & Fullscreen == Fullscreen`.

Affected types are:
* `JoyHatMotionEvent` - now takes `HatState` instead of `Vec<HatState>`
* `KeyDownEvent` - now takes `Mod` instead of `Vec<Mod>`
* `KeyUpEvent` - same as above
* `MouseMotionEvent` - now takes `MouseState` instead of `Vec<MouseState>`