change the way compositeArray is constructed, and how avoided ops are actually avoided

first, compositeArray is now set via .dup because the original RMagick
array is frozen, and thus can't be modified by the subsequent and
needed .delete_if?.

also, removing "avoid" ops ahead of the composite block iterator
ensures that the number of desired ops is run, minus the avoided ones,
whereas previously they were avoided but no substitute was issued,
resulting in an net output less than the requested desired amount.