dev: Add pulse factory
We have implemented a new component called pulse shape factory, which manages all existing pulse shapes and allows dynamically adding new pulse shapes. With this functionality, we don't have to accept env_func
as a callable and therefore make the instructions fully serializable.