Stop hitting the filesystem when running any_of_string

Summary:
any_of_string was operating by creating temp files and then removing
them.  On a sample of 150 files, we spent ~0.5 seconds just unlinking
them.  This diff is not perfect - it instead uses a socket pair in
order to provide the underlying channel to the parser layer.  It
should be equally reliable unless the user attempts to parse strings
larger than the OS is willing to buffer.

Test Plan:
Ran an internal tool which makes heavy use of this.  It executes
correctly and its speed was improved.  Also ran make test.

Reviewers: julienv, pad

Reviewed By: pad

Differential Revision: https://phabricator.fb.com/D760271

Task ID: 2222373