Implement shim for mobile video events.

This PR addresses the following issues:

1) All requests return a 200 OK unless there is an authorization failure. This is deliberate in case the secret key is compromised.
2) Push all of the nasty logic necessary to generate compatible video events into the LMS instead of trying to do that mapping on the mobile device
3) Stop using the deprecated "action" field in the segment.io event. According to their support team this field should not be used anymore.

Fixes: AN-3818

Note that the earlier code assumes that there would not be an 'event_type' already on the incoming event, so an empty string is used if there's no 'name' or 'context.event_type'.  But here, the logic for 'time' is slightly different -- it is not overwritten unless there is a value elsewhere.  Not sure what the right behavior is for such defaults, or even if those conditions are ever hit.  (If they shouldn't be, should there at least be warnings?)  One possibility is to have a legacy event passed in be left unchanged, as is implied by the docstring.  ("Ensures all required fields are included" suggests that it would check if the required field is already present.)  If this method is assuming only particular kinds of events are passed in, it would be good to update the docstring to make that clear.