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.