Add invalid_events operation
This helps to spot where events won't be able to be updated because either:
- the minimum occupancy rule for the room is set and the event attendees aren't enough
- the event is outside the bookable hours and "allow outside hours" isn't set
Added test for localtime formatting function (as I never trust my datetime code) but as this operation is intended as an admin check I'm skipping tests for the actual operation (just like missing_staff and find_conflicts) but will add to #42
Note: Booker event creation ignores the room rules so you only encounter failure on the second pass when updating BookedBy. This operation checks creations too so you don't get surprise later.