Rename by behaviour rather than pattern

- Add tests for public API
- Rename promise to command
- Rename CommandPromise to Chain in anticiaption of better separation of
responsibilities