ConversationalRetrievalChain is not robust to default conversation memory configurations.

### System Info

Langchain 0.0.184
Python 3.11.3
Mac OS Ventura 13.3.1

### Who can help?

@hwchase17 @agola11 

I was reading [this](https://python.langchain.com/en/latest/modules/chains/index_examples/chat_vector_db.html?highlight=conversationalretriever) and changed one part of the code to `return_messages=False` when instantiating ConversationBufferMemory.

We have two lines of code below that ask a question. The first line is `qa({'question': "what is a?"})`. From the error below it seems that messages should be a list. If this is the case, shouldn't it be documented, and perhaps the default keyword argument for `return_messages` should be `True` instead of `False` in `ConversationBufferMemory`, `ConversationBufferWindowMemory` and any other relevant memory intended to be used in `Conversation`. This also would've been circumvented entirely if the docstring for these memory classes contained helpful information about the parameters and what to expect. 

I also suppose a good solve for this would be to just change the default kwargs for all conversation memory to `memory_key="chat_history"` and `return_messages=True`.


```python
import langchain
langchain.__version__
```

    '0.0.184'


```python
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory

chars = ['a', 'b', 'c', 'd', '1', '2', '3']
texts = [4*c for c in chars]
metadatas = [{'title': c, 'source': f'source_{c}'} for c in chars]

vs = FAISS.from_texts(texts, embedding=OpenAIEmbeddings(), metadatas=metadatas)
retriever = vs.as_retriever(search_kwargs=dict(k=5))

memory = ConversationBufferMemory(memory_key='chat_history', return_messages=False)
qa = ConversationalRetrievalChain.from_llm(OpenAI(), retriever, memory=memory)
print(qa({'question': "what is a?"}))
print(qa({'question': "what is b?"}))
```

    {'question': 'what is a?', 'chat_history': '', 'answer': ' a is aaaaa.'}



    ---------------------------------------------------------------------------

    ValueError                                Traceback (most recent call last)

    Cell In[2], line 17
         15 qa = ConversationalRetrievalChain.from_llm(OpenAI(), retriever, memory=memory)
         16 print(qa({'question': "what is a?"}))
    ---> 17 print(qa({'question': "what is b?"}))


    File ~/code/langchain/langchain/chains/base.py:140, in Chain.__call__(self, inputs, return_only_outputs, callbacks)
        138 except (KeyboardInterrupt, Exception) as e:
        139     run_manager.on_chain_error(e)
    --> 140     raise e
        141 run_manager.on_chain_end(outputs)
        142 return self.prep_outputs(inputs, outputs, return_only_outputs)


    File ~/code/langchain/langchain/chains/base.py:134, in Chain.__call__(self, inputs, return_only_outputs, callbacks)
        128 run_manager = callback_manager.on_chain_start(
        129     {"name": self.__class__.__name__},
        130     inputs,
        131 )
        132 try:
        133     outputs = (
    --> 134         self._call(inputs, run_manager=run_manager)
        135         if new_arg_supported
        136         else self._call(inputs)
        137     )
        138 except (KeyboardInterrupt, Exception) as e:
        139     run_manager.on_chain_error(e)


    File ~/code/langchain/langchain/chains/conversational_retrieval/base.py:100, in BaseConversationalRetrievalChain._call(self, inputs, run_manager)
         98 question = inputs["question"]
         99 get_chat_history = self.get_chat_history or _get_chat_history
    --> 100 chat_history_str = get_chat_history(inputs["chat_history"])
        102 if chat_history_str:
        103     callbacks = _run_manager.get_child()


    File ~/code/langchain/langchain/chains/conversational_retrieval/base.py:45, in _get_chat_history(chat_history)
         43         buffer += "\n" + "\n".join([human, ai])
         44     else:
    ---> 45         raise ValueError(
         46             f"Unsupported chat history format: {type(dialogue_turn)}."
         47             f" Full chat history: {chat_history} "
         48         )
         49 return buffer


    ValueError: Unsupported chat history format: <class 'str'>. Full chat history: Human: what is a?
    AI:  a is aaaaa. 

### Information

- [ ] The official example notebooks/scripts
- [ ] My own modified scripts

### Related Components

- [ ] LLMs/Chat Models
- [ ] Embedding Models
- [ ] Prompts / Prompt Templates / Prompt Selectors
- [ ] Output Parsers
- [ ] Document Loaders
- [ ] Vector Stores / Retrievers
- [X] Memory
- [ ] Agents / Agent Executors
- [ ] Tools / Toolkits
- [X] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

```python
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory

chars = ['a', 'b', 'c', 'd', '1', '2', '3']
texts = [4*c for c in chars]
metadatas = [{'title': c, 'source': f'source_{c}'} for c in chars]

vs = FAISS.from_texts(texts, embedding=OpenAIEmbeddings(), metadatas=metadatas)
retriever = vs.as_retriever(search_kwargs=dict(k=5))

memory = ConversationBufferMemory(memory_key='chat_history', return_messages=False)
qa = ConversationalRetrievalChain.from_llm(OpenAI(), retriever, memory=memory)
print(qa({'question': "what is a?"}))
print(qa({'question': "what is b?"}))
```

### Expected behavior

In this code I would've expected it to be error free, but it has an error when executing the second call of the `qa` object asking `"what is b?"`.