Typing of single-argument array_filter

Summary: Here is a pretty common patten: you use an API to load a bunch of stuff, some of it may come back as null due to circumstances beyond your control, so you stick it into array_filter... and we're blind, going from array of strongly typed things to an unknown type.

Here is a proposal to improve the situation by hardcoding (some part) of the array_filter behavior into the type-checker. See the unit tests for example of how I imagine it working. It changes type of array_filter, depending on the type of arguments, to one of the following:

function(array): array
function(Container<?Tv>): array<mixed, Tv>
function(KeyedContainer<Tk, ?Tv>): array<Tk, Tv>

Reviewed By: @elgenie

Differential Revision: D1447846
Update .hhi files for array_filter

Summary: Sane typing.

Reviewed By: @elgenie

Differential Revision: D1567517
array_filter: make the .hhi files work with custom return type.

Summary: This is merging work from D1447846 and D1567517. It was originally set up in a way that ignored .hhi definitions, but I do want to use them for argument typechecking, I just want to overwrite the return type with something custom.

Reviewed By: @dlreeves

Differential Revision: D1567598
Fixed the logic of touch() function

Summary: The logic as it used to be was different from the one in PHP5 and what's required by the standard.

This non-compliance was breaking Symfony's SortableIteratorTest.

Reviewed By: @ptarjan

Differential Revision: D1568332