This PR is a rework of `OpenAiTokenizer`. Added `OpenAiTokenizerIT` with lots of tests to ensure that `OpenAiTokenizer` calculates token usage very close to OpenAI. In most cases calculation is 1:1, in some corner cases the difference is within 5%.
This PR introduces a support for [parallel tool calling](https://platform.openai.com/docs/guides/function-calling/parallel-function-calling) in OpenAI integration.
This PR fixes https://github.com/langchain4j/langchain4j/issues/325 - [x] Migrate AzureOpenAiChatModel - [x] Migrate AzureOpenAiEmbeddingModel - [x] Migrate AzureOpenAiLanguageModel - [x] Migrate AzureOpenAiStreamingChatModel - [x] Migrate AzureOpenAiStreamingLanguageModel - [x] Add a full suite of tests