The initial API supports two ways to handle re-imported blocks:
replace_existing == True: When a block is imported a second time, update it. In other words, prefer the source (course) version.
replace_existing == False: When a block is imported a second time, skip it. In other words, prefer the target (library) version.
However, in the UI, we want a third, different behavior: when a block is imported a second time, create it as second forked version.
This means that the API should support three ways to handle reimported blocks:
repeat_handling_strategy == "update"
repeat_handling_strategy == "skip"
repeat_handling_strategy == "fork" <- new
cc @cmltaWt0 - future work for us