Refactor how simple hash assignments are handled.

There is now an assign_key method that handles assignment, and avoids
the need for a WHENCE being attached (and thus a closure created). A
fallback exists for anything not implementing assign_key.