Add ImageGPT
# What does this PR do?

This PR adds [ImageGPT](https://openai.com/blog/image-gpt/), "Generative Pre-training from Pixels", by OpenAI. ImageGPT is to GPT2 what ViT is to BERT.

OpenAI released 3 variants (small, medium and large) more than a year ago. Models are on the hub: https://huggingface.co/models?other=imagegpt

It directly fits into the existing GPT-2 model (with some minor changes: "quick gelu" activation function, different layernorm, no tied embeddings). The cool thing is that you can just use the `generate()` method to generate pixel values.

Here's a [Colab notebook](https://colab.research.google.com/drive/1u8dmI4uAvZ5oO-E01S6gh5ThWjiPCKXO?usp=sharing) for both conditional and unconditional image generation.
Update: [new notebook](https://colab.research.google.com/drive/1AHtycNtck6qxjxI5UhqaZTc1POH2U1we?usp=sharing), with `ImageGPTFeatureExtractor`.

Big thanks go to https://github.com/openai/image-gpt/issues/7, who made it very easy for me to understand and contribute the model.

## To do:

- [x] Write tests for `ImageGPTFeatureExtractor`.
I'm trying to use the notebook you linked, but I'm receiving an import error:

ImportError: cannot import name 'ImageGPTForCausalLM' from 'transformers' (/usr/local/lib/python3.7/dist-packages/transformers/__init__.py)<|||||>Hi @NielsRogge! I just realized the [original Image GPT architecture](https://github.com/openai/image-gpt/blob/c6af2ebf57e2460c71fefa53cd9054b060cf716d/src/model.py#L36) uses a root mean square instead of a standard deviation in its layer normalization so I believe it should look like [this](https://github.com/apeguero1/image-gpt/commit/6ad5120fa3538843c9a020a1f43833b13f0aef06). Looks like there's a [paper](https://arxiv.org/abs/1910.07467) on it too haha :D

Interestingly, the image generation produces only subtle visible differences when using the same random seed but better to stick with the original tensorflow implementation I guess?<|||||>Thanks, I've updated it.