shell-string 0.6.0

Obvious CLI for basic string manipulation
# Changelog

- 0.6.0
    - `each --threads=N` runs up to N commands in parallel, as a threadpool. Each command's output
      is buffered and written in one piece, so parallel commands can't mangle each other's output.
      Results are printed in the order the commands finish; `each --sequential` prints them in the
      order of the input instead, waiting for earlier lines.
    - `each` draws a progress bar on stderr while more than one thread is running, leaving stdout
      free for piping
    - **breaking**: a command failing under `each` no longer aborts the run. The failure is reported
      on stderr, the remaining lines still run, and `string` exits 1 at the end.
    - errors are now printed instead of being swallowed by a silent `exit(1)`, and the output of a
      failed command is actually included in the message (it was always empty before)
    - **breaking**: `contains`, `starts-with` and `ends-with` are no longer predicates over the whole
      input. Instead of exiting 0/1 they now filter the input line by line and print every matching
      line. Shell conditions relying on the exit code (`string contains foo && ...`) need to be
      rewritten, e.g. by testing the output for emptiness.
    - all three take a `--not` / `-n` flag to invert the match and print the lines that do *not* match
    - `starts-with` and `ends-with` ignore surrounding whitespace, on both the pattern and the line
- 0.5.1
    - implement `join` subcommand — joins lines with a configurable separator (inverse of `split`)
    - implement `contains`, `starts-with`, `ends-with` subcommands that exits 0/1, useful in shell if conditions. The absence means users reach for grep -q instead.
- 0.5.0
    - Merge `map` and `foreach` into simplified `each` command
    - improve documentation
- 0.4.1
    - implement `foreach` subcommand
- 0.3.6
    - implement `interleave` subcommand
- 0.3.3
    - implement `trim` subcommand
- 0.3.2
    - implement `case` subcommand for lowercase and uppercase transformations
    - implement proper testing
- 0.3.1
    - `replace` command no longer prints trailing new line
    - start cultivating changelog