use `path_locations()` to deal with os differences in paths, refactor `shebang`/`new_shebang` init