Enhancement: Extend tf.nest to support ExtensionType as a complete nested structure
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this [failed invocation](https://github.com/tensorflow/tensorflow/pull/62316/checks?check_run_id=18329404650) of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request. Hi @KartikeyBartwal Can you please sign CLA. Thank you! > Hi @KartikeyBartwal Can you please sign CLA. Thank you!

done 🙌 Hi @pcish Can you please review this PR ? Thank you! Hi @pcish Can you please review this PR ? Thank you! Hi @pcish Can you please review this PR ? Thank you! Hi @pcish Can you please review this PR ? Thank you! Hi @edloper Can you please review this PR ? Thank you!
Referencing issue #61954

### What does this PR do ? 

The changes made to the **_map_structure** function aim to address the issue of custom types, such as MyComplexData (derived from **tf.experimental.ExtensionType)**, not being recognized as complete nested structures by the **tf.nest** module. To solve this issue, the following modifications were made to the function:

### Custom Type Handling:

A custom type checker, **can_handle_extension_type**, was introduced to identify objects that are instances of custom types based on **tf.experimental.ExtensionType**. This allows the function to determine when to apply custom handling.

### Custom Type Handling Logic:

The **handle_extension_type** function was created to handle custom types based on **tf.experimental.ExtensionType**. In this function, you can define specific logic to process custom types. For example, you can add code to convert the custom data structure into TensorFlow tensors or perform other operations relevant to your use case.

### Registration of Custom Type Handler:

The custom type checker and handler were registered using **tf.nest.register_structure_coder**. This registration ensures that the **tf.nest** module correctly recognizes and processes custom types based on **tf.experimental.ExtensionType.**