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

from pyodide_test_runner import run_in_pyodide


@run_in_pyodide(
    packages=["numpy", "svgwrite", "attrs", "pyrsistent", "jsonschema", "tskit"]
)
def test_tskit(selenium):
    import tskit

    # basic test
    tc = tskit.TableCollection(2)
    assert tc.sequence_length == 2
    tc.nodes.add_row(flags=tskit.NODE_IS_SAMPLE)
    tc.nodes.add_row(time=1)
    tc.edges.add_row(left=0, right=1, parent=1, child=0)
    tc.edges.add_row(left=1, right=2, parent=1, child=0)
    ts = tc.tree_sequence()
    assert ts.num_nodes == 2

    # save and load
    ts.dump("/tmp/tskit.trees")
    ts2 = tskit.load("/tmp/tskit.trees")
    ts.tables.assert_equals(ts2.tables)

    # test dependency related functions
    ts.draw_svg(size=(200, 200))
    tskit.MetadataSchema({"codec": "json"})

from pyodide_test_runner import run_in_pyodide


@run_in_pyodide(
    packages=["numpy", "svgwrite", "attrs", "pyrsistent", "jsonschema", "tskit"]
)
def test_tskit(selenium):
    import tskit

    # basic test
    tc = tskit.TableCollection(2)
    assert tc.sequence_length == 2
    tc.nodes.add_row(flags=tskit.NODE_IS_SAMPLE)
    tc.nodes.add_row(time=1)
    tc.edges.add_row(left=0, right=1, parent=1, child=0)
    tc.edges.add_row(left=1, right=2, parent=1, child=0)
    ts = tc.tree_sequence()
    assert ts.num_nodes == 2

    # save and load
    ts.dump("/tmp/tskit.trees")
    ts2 = tskit.load("/tmp/tskit.trees")
    ts.tables.assert_equals(ts2.tables)

    # test dependency related functions
    ts.draw_svg(size=(200, 200))
    tskit.MetadataSchema({"codec": "json"})
