Build results of filter operations using a C-array

Previously the resulting collections produced by filter operations was built
using a mutable instance, and then copied into an immutable instance.

With this change, the results are gathered into a C-array, which is then used
to create the resulting instance of the receiver's immutable class.