STYLE: Specify target-version for black
The `target-version` option explicitly tells `black` that it can use Python features from the supplied versions.  The default is per-file detection by looking for the presence specific syntax, e.g. f-strings would indicate py36.

Currently `black` does not detect this for us since we just bumped to py36, so detection will not occur until f-strings are added, which would in turn necessitate these changes as part of the f-string PRs, making them a bit more convoluted than needed.  This resolves that issue by explicitly telling `black` our supported versions and enforcing those changes for the entire codebase in this PR.
can u update the template and pre-commit hooks  as well?

or do they read the pyproject.toml? I tested it locally and it looks like it reads the `pyproject.toml` by default, like how `flake8` reads from `setup.cfg` by default with pre-commit, etc. Yes, when we started using black, we didn't yet have the pyproject.toml, so needed to put the config flags into the CI call itself. But now we have that, we should indeed move the config there. lgtm. can you merge master (conflict); merge on green. thanks @jschendel !