c3e402a4

By: Michael Lynch <git@mtlynch.io>

Use ItemName type for grocery item names throughout core logic

Item names were passed around as plain strings, so the validated
ItemName type only existed momentarily inside the sqlite layer before
being converted back. This widens ItemName usage so names stay typed
across the store interface, business logic, and shared types, matching
how the Section type already flows through the codebase.

Strings are now used for item names only at the true boundaries:
- handlers parse user-controlled form/path input into ItemName and
  render names back to strings (templates, JSON)
- the sqlite package converts ItemName to/from string immediately
  adjacent to SQL reads and writes

types.StoredListItem.Name now uses ItemName (types.ItemSection.Name
already did), and the Store interface methods that take/return item
names use ItemName rather than string. Adds MustCreateNewItemName as a
test helper, mirroring MustCreateNewSection.