Add UnivNet Vocoder Model for Tortoise TTS Diffusers Integration
# What does this PR do?

This PR adds the UnivNet GAN vocoder model ([paper](https://arxiv.org/pdf/2106.07889.pdf), [code](https://github.com/mindslab-ai/univnet)) to `transformers`, which is the vocoder used in the Tortoise TTS text-to-speech model ([paper](https://arxiv.org/pdf/2305.07243.pdf), [code](https://github.com/neonbjb/tortoise-tts)) which is currently being integrated into `diffusers`. See [this issue](https://github.com/huggingface/diffusers/issues/3891) in `diffusers`.

![univnet_model_architecture](https://github.com/huggingface/transformers/assets/58458699/8a33190a-cd52-4e81-a6ed-2fc921b9f86f)

## Before submitting
- [ ] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).
- [x] Did you read the [contributor guideline](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md#start-contributing-pull-requests),
      Pull Request section?
- [x] Was this discussed/approved via a Github issue or the [forum](https://discuss.huggingface.co/)? Please add a link
      to it if that's the case.
- [x] Did you make sure to update the documentation with your changes? Here are the
      [documentation guidelines](https://github.com/huggingface/transformers/tree/main/docs), and
      [here are tips on formatting docstrings](https://github.com/huggingface/transformers/tree/main/docs#writing-source-documentation).
- [x] Did you write any new necessary tests?


## Who can review?

Anyone in the community is free to review the PR once the tests have passed. Feel free to tag
members/contributors who may be interested in your PR.

@sanchit-gandhi 
@susnato 

Hi @dg845 if you are planning to add it to the `models` folder, then I think it should have a doc file(`univnet.md`) in the docs.<|||||>For now I've added the UnivNet code to the `/src/transformers/models/univnet/` directory. @sanchit-gandhi, since the UnivNet model isn't technically a transformer model (in that it doesn't use any attention mechanisms), is this the best place to put it? For example, the [`SpeechT5HifiGan`](https://huggingface.co/docs/transformers/main/model_doc/speecht5#transformers.SpeechT5HifiGan) vocoder is in `/src/transformers/models/speecht5/` along with the other SpeechT5 models, but I assume most of the other Tortoise TTS code will go into `diffusers` rather than `transformers`.<|||||>Nice start @dg845! Yep fine to have it as a standalone model - we have ResNet in transformers as well which is not strictly attention-based.<|||||>Hi @sanchit-gandhi, I think the PR is ready for review.

The following are the differences between the [`SpeechT5HifiGan`](https://huggingface.co/docs/transformers/main/model_doc/speecht5#transformers.SpeechT5HifiGan) and the `UnivNetGan` model:

- The `SpeechT5HifiGan` outer residual blocks* (that is, [`HifiGanResidualBlock`](https://github.com/huggingface/transformers/blob/main/src/transformers/models/speecht5/modeling_speecht5.py#L3074)) upsamples the number of hidden channels between each outer residual block, but the `UnivNetGan` outer residual blocks* (`UnivNetLVCBlock`) keep the number of hidden channels constant.
- Although the structures of the inner residual blocks (for UnivNet, the `UnivNetLVCResidualBlock` module) are similar: `LReLU` => dilated `Conv1d` => `LReLU` => `Conv1d` => skip connection, the UnivNet model uses a [location variable convolutional layer](https://arxiv.org/pdf/2102.10815.pdf) followed by a [gated activation unit](https://proceedings.neurips.cc/paper_files/paper/2016/file/b1301141feffabac455e1f90a7de2054-Paper.pdf) in place of the second `Conv1d` layer.
- Accordingly, each outer residual block (`UnivNetLVCBlock`) in UnivNet has a kernel predictor residual network (`UnivNetKernelPredictor`) to predict the kernels and biases for the location variable convolutional layer in each inner residual block in the main resnet.
- In addition to a conditioning log-mel `spectrogram`, UnivNet takes in a noise sequence as input. The `noise_waveform` is the input to the "main" resnet (e.g. the stack of `UnivNetLVCResidualBlock`s), while the conditioning `spectrogram` is the input to the kernel predictor in each `UnivNetLVCBlock`.

(*) "Outer residual block" is a bit of a misnomer, since for both blocks in question (`HifiGanResidualBlock`, `UnivNetLVCBlock`) there's no skip connection between the input to the block and the main computation in the block.<|||||>Also, I'm not sure why `utils/check_table.py` is failing. I ran `make fix-copies` to create a table entry for UnivNet in `docs/source/en/index.md`, and then added a checkmark for PyTorch support, but for some reason `check_table.py` doesn't seem to like that.<|||||>> Also, I'm not sure why `utils/check_table.py` is failing.

`utils/check_table.py` is no longer failing after I merged `main` into the PR branch. Running `make fix-copies` adds an entry for UnivNet, but I'm not sure why it doesn't add a checkmark in the "PyTorch support" column, perhaps the model information is mis-configured.