Update QP controller

I think it makes sense. Previously using the SharedDataHandle class, controller classes would have to verify (or just assume) the contents of the ShareDataHandle object internally. Different controller blocks in a cascade often need different pieces of data, so when constructing a controller cascade the user would have to look through all of the component classes before they could correctly construct the shared data object.

The idea behind the abstract ControllerData object is it forces subclasses to implement a verify method that clearly captures the required and optional properties for that controller class. It's abstract so people have to at least think about implementing this method properly and not just dumping things in a "data" struct property.