Feature auto io

The goal of this branch is to standardize the AutoFilter argument types so that new types can be introduced.

This branch adds:
auto_in<T>, which is equivalent to shared_ptr<const T>.
auto_arg<T>, which is a unifying type for all AutoFilter arguments.
var_or(bool...) and var_and(bool...) which are constexpr functions for variadic logical combination.

This branch removes:
is_autofilter, which provided some of the introspection enabled by auto_arg.

Possible breaking change:
This branch also makes shared_ptr<T> a distinct type from T, so successive modifications to the same decoration require that shared_ptr<T> is used to refer to the decoration.