Don't wrap an object more than once

This makes the action .AsDynamic() idempotent, so x.AsDynamic().AsDynamic() can still access x's fields; this also means code which uses the AsDynamic() version can be reentrant.