Apply filter list to a data buffer.
See git2/buffer.h for background on git_buf objects.
If the in buffer holds data allocated by libgit2 (i.e. in->asize is
not zero), then it will be overwritten when applying the filters. If
not, then it will be left untouched.
If there are no filters to apply (or filters is NULL), then the out
buffer will reference the in buffer data (with asize set to zero)
instead of allocating data. This keeps allocations to a minimum, but
it means you have to be careful about freeing the in data since out
may be pointing to it!
0 on success, an error code otherwise