Use of custom query/placeholder for external dictionaries.
The `placeholder` is similar to `update_field`

Current implementation supports only simple table field like 
`SOURCE(CLICKHOUSE(... update_field 'added_time' update_lag 15))`
but miss support for complex/compound expressions (that for example could use index more efficiently).

Example: 
query = "
    ....
    from t1
    where :placeholder between col1 and col2 and col3=42
    "
invalidate_query=
placeholder_query = "select max(col1) from t1 ...",
placeholder_init_str = "toDateTime('1970-01-01')"

So initial value of placeholder is calculated from `placeholder_init_str`,
next value from `invalidate_query`
and could be used in query.

By introducing this feature work with dictionary sources will be more flexible and general.
const DictionaryStructure & dict_struct_,
    const std::string & db_,
    const std::string & schema_,
    const std::string & table_,
    const std::string & query_,
    const std::string & where_,
    IdentifierQuotingStyle quoting_style_)
    : dict_struct(dict_struct_)
    , db(db_)
    , schema(schema_)
    , table(table_)
    , query(query_)
    , where(where_)
    , quoting_style(quoting_style_)
{
    if (table.empty() && query.empty())
        throw Exception(ErrorCodes::UNSUPPORTED_METHOD, "Setting `table` or `query` must be non empty");
    if (!query.empty() && (!table.empty() || !where.empty()))
        throw Exception(ErrorCodes::UNSUPPORTED_METHOD, "Setting `table` or `where` cannot be used with `query` parameter");
}
void ExternalQueryBuilder::writeQuoted(const std::string & s, WriteBuffer & out) const