initial implementation and tests
add editorconfig
add linting and code cleanup