Follow up work to
Unifying multiple dictionary-encoded arrays is one use case. Another is rewriting a DictionaryArray to be based on another dictionary. For example, this would be used to implement Cast from one dictionary type to another.
This will need to be able to insert nulls where there are values that are not found in the target dictionary
see also discussion at https://github.com/apache/arrow/pull/3165#discussion_r243025730