Repository: pytorch
Issue: `torch.distributed.rpc.backend_registry.register_backend` fails to update `BackendType` enum
Labels: oncall: distributed,triaged,module: rpc

### 🐛 Describe the bug

The following code will fail:

```python
import torch.distributed.rpc as rpc


def construct_rpc_backend_options_handler(*args, **kwargs):
    pass


def init_backend_handler(*args, **kwargs):
    pass


print("before registering, id(rpc.backend_registry.BackendType):",
      id(rpc.backend_registry.BackendType))
print("before registering, id(rpc.BackendType):", id(rpc.BackendType))

rpc.backend_registry.register_backend("MY_BACKEND_NAME",
                                      construct_rpc_backend_options_handler,
                                      init_backend_handler)

print("after registering, id(rpc.backend_registry.BackendType):",
      id(rpc.backend_registry.BackendType))
print("after registering, id(rpc.BackendType):", id(rpc.BackendType))

assert hasattr(rpc.backend_registry.BackendType, "MY_BACKEND_NAME")  # passes
assert hasattr(rpc.BackendType, "MY_BACKEND_NAME")  # fails
```

It produces the following output for me:

```
before registering, id(rpc.backend_registry.BackendType): 93950199775984
before registering, id(rpc.BackendType): 93950199775984
after registering, id(rpc.backend_registry.BackendType): 93950206447680
after registering, id(rpc.BackendType): 93950199775984
Traceback (most recent call last):
  File "/localdata/georgew/scratch/my_rpc_backend.py", line 27, in <module>
    assert hasattr(rpc.BackendType, "MY_BACKEND_NAME")  # fails
AssertionError
```

This appears to be due to `BackendType` being replaced with the updated object in `register_backend`, but the symbol re-exported in `torch.distributed.rpc` is still mapped to the original `BackendType`.

(Also, as a minor detail, it appears that `__all__` is set twice in `backend_registry.py`.)

### Versions

```
PyTorch version: 2.0.0+cpu
Is debug build: False
CUDA used to build PyTorch: None
ROCM used to build PyTorch: N/A

OS: Ubuntu 22.04.1 LTS (x86_64)
GCC version: (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
Clang version: 14.0.6 (https://github.com/conda-forge/clangdev-feedstock ceeebe884c3cfd7160cf5a43e147f94439fafee3)
CMake version: version 3.23.3
Libc version: glibc-2.35

Python version: 3.10.6 | packaged by conda-forge | (main, Aug 22 2022, 20:36:39) [GCC 10.4.0] (64-bit runtime)
Is CUDA available: False
CUDA runtime version: No CUDA
CUDA_MODULE_LOADING set to: N/A
GPU models and configuration: No CUDA
Nvidia driver version: No CUDA
cuDNN version: No CUDA
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: True

[... cut ...]

Versions of relevant libraries:
[pip3] numpy==1.24.1
[pip3] torch==2.0.0+cpu
[pip3] torchvision==0.15.0+cpu
[conda] numpy                     1.24.1                   pypi_0    pypi
[conda] torch                     2.0.0+cpu                pypi_0    pypi
[conda] torchvision               0.15.0+cpu               pypi_0    pypi
```

cc @mrshenli @pritamdamania87 @zhaojuanmao @satgera @rohan-varma @gqchen @aazzolini @osalpekar @jiayisuse @H-Huang @kwen2501 @awgu @pietern @jjlilley @mrzzd