[metal] Use special throw macro when encountering Metal API errors (#77430)
Summary: Error messages from `TORCH_CHECK` are stripped during production builds via `-DSTRIP_ERROR_MESSAGES`. This diff introduces a new macro `METAL_CHECK` which will always preserve the error message. This macro is used when encountering errors produced by Metal API calls so that we can heve enough context to debug.
Test Plan:
Test in pytorch playground:
```
arc focus2 -b pp-ios -a ModelRunner -a //xplat/caffe2/c10:c10Apple -a //xplat/caffe2:torch_mobile_coreApple -a //xplat/caffe2/fb/dynamic_pytorch:dynamic_pytorch_implApple -a //xplat/caffe2:coreml_delegateApple -a ModelRunnerDevOps -a //xplat/caffe2:torch_mobile_all_opsApple -fd --force-with-wrong-xcode
```
Differential Revision: D36378285
Pull Request resolved: https://github.com/pytorch/pytorch/pull/77430
Approved by: https://github.com/kimishpatel