Refactored virtual products to be more extensible

now an event is dispatched when the order is placed. So a module can override or extends the default behavior . 
An other event is dispatched when the file is requested via /account/download/{id} path. modules can overrides this behavior too or implement restrictions and set a custom response instead of the default download.
if the paramater ```$orderProduct``` must be an instance of ```Thelia\Model\OrderProduct``` please add hint typing.