added two new contract methods to the caller class, load_data and expected_callbackargs (static)
this means that the base class is the only place that needs a constructor
and that no data loading happens in the constructor
this in turn means we can check callback argument validity much more lightly
also completely remoted portfolio_add_button function and replaced with a class
as the argument list was getting out of control. it's now much more readable.
currently portfolio_add_button still exists and just acts as a wrapper around the class
so i have not changed any calling code to use the new objects yet.
Especially as some of the functions shared by base classes (portfolio plugin vs caller) were the same
it was getting a bit unweildy to have all this in one file.