Set correct structure when deleting by key path.

structure doesn't set correct new structure when deleting by key paths via `Cursor.remove(key)` or `Cursor.delete(key)`. Instead, value at key path gets set to undefined. This behaviour is corrected.
Set correct structure when modifying it during add, change, or delete events.
Better heuristic on detecting existence of key path.

This properly emit correct events such as updating the value at key path to a falsey value.