Wrap key modifier bitfield

The key and mouse button callbacks now take a KeyMods struct for the mods parameter. This struct wraps the bitfield, allowing for a nicer way to query what modifiers are currently present.