io/fs: implement subFS.Sub
io/fs: implement subFS.Sub

Calling fs.Sub with the result of fs.Sub multiple times creates a deep
call stack for Open and other methods. Enhance the fs.FS returned by
fs.Sub to implement fs.SubFS and reduce the call stack.

Fixes #45349

Change-Id: I10e10501e030176e10e2ae5ad260212e5c784bed
Reviewed-on: https://go-review.googlesource.com/c/go/+/306769
Run-TryBot: Ian Lance Taylor <87e9c6d529889242b7e184afb632328636553ab4@golang.org>
TryBot-Result: Go Bot <66cb808b70d30c07676d5e946fee83fd561249e5@golang.org>
Reviewed-by: Ian Lance Taylor <87e9c6d529889242b7e184afb632328636553ab4@golang.org>
Trust: Emmanuel Odeke <bd234ba4276433f0e5fc7a8fa2d18274fa711567@orijtech.com>

nawawi/go,cloudflare/go,golang/go,CAFxX/go,CAFxX/go,CAFxX/go,cloudflare/go,golang/go,cloudflare/go,golang/go,golang/go,cloudflare/go,CAFxX/go,nawawi/go,nawawi/go,CAFxX/go,golang/go,golang/go,cloudflare/go,CAFxX/go,nawawi/go,golang/go,cloudflare/go,cloudflare/go,cloudflare/go,nawawi/go,CAFxX/go,golang/go,nawawi/go,nawawi/go,CAFxX/go,nawawi/go