Remove templating from EventSender; add EventSenderClient and virtualize EventSenderClient::dispatchPendingEvent().
EventSender should be able to send arbitrary DOM event names per sender.

Change EventSender's APIs to include the DOM event name that should be fired.
Do not accept and store an event name in the EventSender constructor.
Use one EventSender instance per Document, rather than several static local instances shared among event types.
Add a new API that dispatches all pending events with a specific type.
Record and replay sending of pending events.

* Store an InputIterator pointer on Document, and replace uses of ReplayUtilities with accesses to the Document's InputIterator.
* EventSender stores a reference to its Document, and dispatches differently during capture and replay.
* Remove uses of Node::dispatchAsyncEvent that now are deterministic because EventSender is deterministic.
Web Replay: fix spammy function call tracing when not capturing or replaying.
Web Replay: Only call function tracing instrumentation in InspectorReplayAgent in debug builds.
Web Replay: clean up header includes and guards in NetworkProxy.
Web Replay: improve error diagnostics in NetworkProxy for missing or mismatched resource requests.
Web Replay: memoize document.lastModified.

The last modified value for a document is nondeterministically generated from the current system time
if no Last-Modified header was found for the original resource (the common case).
Web Replay: rename DOM event count to 'execution ticks' throughout.
Add a uniform interface for increasing execution ticks to InputIterator.
Clean up uses of EventLoopInput and remove unnecessary comments.
Web Replay: remove EventLoopInputDispatcher from EventLoopInput::dispatch parameters,
and remove didDispatch() calls from all inputs.

Closes #386.