Add events

- Client emits 'request.start' and 'request.complete'
- Improved test framework