Add ReadInstr<T>::filter(std::shared_ptr<Event>&) virtual function

This virtual member function allows a tree of ReadInstr objects to be
converted to a list of read event.
Create per-thread event recorder class

The Recorder class allows events to be recorded on a per-thread basis.