QueryBuilder::whereCriteria: possibility to pass callback

The callback syntaxes should be explicit and if they're not, it should fallback to foreaching the array and building criteria. Maybe even `Closure` might enough for now.