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.
Fix TestMiscSystemWebCode test
Add AsDynamicIdempotent test
Update package version to 2.0.3