use _extra_criteria to store with_expression() expression
this is an alternate version of the first patch, which adds extra
handling for the "expression" in local_opts. this patch has
with_expression() use _extra_criteria directly, as this attribute
is currently unpurposed for column-based attributes.
Fixed caching bug where using the :func:`_orm.with_expression` construct in
conjunction with loader options :func:`_orm.selectinload`,
:func:`_orm.lazyload` would fail to substitute bound parameter values
correctly on subsequent caching runs.