Add mathematic operators for Patterns
Use shared_ptr rather than unique_ptr for Pattern.
Add clever dispatcher for unpacking iterable types into function
arguments.
Change PSequence to be backed by a std::vector.  This makes
initialization nicer, and given that we are dynamically allocating to
create the Pattern anyway doesn't seem too horrendous.
Lot of refactoring of events.  Split into seperate file, make
pattern_event use vectors and use the dispatcher for dispatch, and add
constructors for each event type.
Merge branch 'features/use-shared-ptr'