Enabling End User Development through Mashups: Requirements, Abstractions and Innovation Toolkits