Typing of multi-argument array_filter

Summary: This is the same as single argument one, except it doesn't remove the nullability from the value type.

Reviewed By: @jwatzman

Differential Revision: D1575720
Improve Result creation in HHVM

Summary: Most of our users (from conversions) still get the result as a Vector of Maps, this was super slow. But it is the easiest way for them to access the results. With this diff, we should probably gain perf and memory in the existing code that uses the map. We are no longer duplicating the strings.

Major optimization but simple! Each time we pass to map a `const char*`, it actually creates a HPHP::String. We don't actually want this! We want it to ref the only one copy of the fields, we actually have only one copy in the C++ side, but the extension doesn't.
Ref: diffusion/FBCODE/browse/master/hphp/runtime/base/type-string.h$133-137,160-163

Adding FieldIndex class, which holds the HPHP::String for each column. This way even using our slow buildRows, we won't have the duplication by simply passing HPHP::String around.
Sometimes we don't have RowFields, because the query is empty, or doesn't have this kind of result :). I preferred to still instantiate FieldIndex just to avoid having a shared_ptr that is nullptr.

Removing some duplicated code and putting the field interpretation in one place.

Adding `at` to MysqlRow so users of this interface don't need to make a call saying the type of the field, but just getting a mixed. The goal with this was to have a simple interface for MysqlRow so the acceptance would be bigger.

Some naming conversions are inconsistent here, but I'll leave to fix them later.

Reviewed By: @chipturner

Differential Revision: D1570690