Feature auto io

The goal of this branch is to standardize the AutoFilter argument types so that new types can be introduced.

Possible breaking changes:
This branch will trigger a static_assert if multiple AutoFilter arguments are satisfied by the same instance.
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.

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.