feat: add entities/todos/calendar move primitives
Adds `sol call entities move`, `sol call todos move`, and
`sol call calendar move` -- the lowest-level building blocks for
facet reorganization workflows.
- Todos and calendar events are soft-cancelled in the source facet
(with `cancelled_reason: "moved_to_facet"` and `moved_to` metadata)
and re-appended in the destination, preserving created_at and nudge.
Dest-first ordering ensures the source remains intact if the append
fails. Source-cancel failures emit an actionable warning.
- Entities are moved at the directory level with `shutil.move`. An
optional `--merge` flag deduplicates observations by (content,
observed_at) and keeps the destination entity.json.
- All three commands require `--consent` for audit logging, validate
both `--from` and `--to` facets, and log to the facet action log.
- `TodoItem` and `CalendarEvent` gain `cancelled_reason` and `moved_to`
fields, surfaced in both JSONL storage and `as_dict()`.