Simplify the version bump process. ### Description

Simplify the version bump process.

- Use substitution hook in docs to update CDN URL.
  - In `dev` or `prerelease` versions, it will point to `dev` url
  - In `stable` versions, it will point it `vX.Y.Z` url
- Introduce a version bump script `tools/bump_version.py`.


~- Use `bump2version` to bump Python versions (continuing from #2460)~
~- Use `npm version` to bump JS versions~
~- Update `run_docker` script to use latest deployed pre-built docker image when `--pre-built` option is specified.~

### Checklists

- [x] Add new / update outdated documentation

package:
  name: yt
  version: 4.0.2

source:
  url: https://files.pythonhosted.org/packages/b6/ba/c28c9af83797c0e7a9273004a9ac0a924e6c5920fd0aa944d305e8288b30/yt-4.0.2.tar.gz
  sha256: 76b238eef0fbbbea810dda4821331a9b03f74e5e2dda9997e401c685deec1631

  patches:
    - patches/skip-openmp.patch
    - patches/tomli-3833.patch

requirements:
  run:
    - numpy
    - matplotlib
    - sympy
    - setuptools
    - packaging
    - unyt
    - cmyt
    - colorspacious
    - tqdm
    - tomli
    - tomli-w

build:
  # The test module is imported from the top level `__init__.py`
  # so it cannot be unvendored
  unvendor-tests: false

test:
  imports:
    - yt

package:
  name: yt
  version: 4.0.2

source:
  url: https://files.pythonhosted.org/packages/b6/ba/c28c9af83797c0e7a9273004a9ac0a924e6c5920fd0aa944d305e8288b30/yt-4.0.2.tar.gz
  sha256: 76b238eef0fbbbea810dda4821331a9b03f74e5e2dda9997e401c685deec1631

  patches:
    - patches/skip-openmp.patch
    - patches/tomli-3833.patch

requirements:
  run:
    - numpy
    - matplotlib
    - sympy
    - setuptools
    - packaging
    - unyt
    - cmyt
    - colorspacious
    - tqdm
    - tomli
    - tomli-w

build:
  # The test module is imported from the top level `__init__.py`
  # so it cannot be unvendored
  unvendor-tests: false

test:
  imports:
    - yt
