Added entry_points.

Actually, this whole block might be better off being something like:

```python
for backend in pkg_resources.iter_entry_points("cryptography.hazmat.backends"):
    binding = pkg_resources.get_entry_info(
        backend.dist,
        "cryptography.hazmat.bindings",
        backend.name,
    )
    if binding is not None:
        binding = binding.load(require=False)
        if not binding.is_available():
            continue

    _available_backends_list.append(backend.load(require=False))
```

This makes the ``cryptography.hazmat.bindings`` *optional* and only required if you want to have the conditionally included backend. It also removes the need to change the code to add a name parameter, and instead it mandates that the name of the two entry points are the same.

If we do the above, it might be even better to do the conditional check like this:

```python
is_backend_available = pkg_resources.get_entry_info(
    backend.dist,
    "cryptography.hazmat.is_backend_available",
    backend.name,
)
if is_backend_available is not None:
    is_backend_available = is_backend_available.load(require=False)
    if not is_backend_available():
        continue
```

with a setup.py thing like:

```python
setup(
    entry_points={
        "cryptography.hazmat.backends": [
            "commoncrypto = cryptography.hazmat.backends.commoncrypto:backend",
            "openssl = cryptography.hazmat.backends.openssl:backend",
        ],
        "cryptography.hazmat.is_backend_available": [
            "commoncrypto = cryptography.hazmat.bindings.commoncrypto.binding:Binding.is_available",
        ],
    }
)
```

I haven't verified that this works with the ``:Binding.is_available``, however I think it does, and if it does it removes the only remaining "magic name" construct in this code.