Refactoring prototype API to allow non-clonable objects and protocol conforming objects.