Adds two modes of GPU frame capture support for enhanced debugging. GPU frame capture begin/end allow instantaneous frame capture of all GPU commands within the capture boundary. GPU frame capture scopes allow several user-defined capture regions which can wrap key parts of code. These scopes are exposed to connected GPU tools allowing the user to manually trigger a capture of a known scope at the desired time. This is currently integrated with the Metal backend for support with Xcode. Related to #105591 Pull Request: blender/blender#105717