move the responsibility of handling step listeners to flowStep instead of flow
Add licence header and documentation