Jackalope Implementation: The item has a state machine to track in
what state it currently is. All API exposed methods must call
Item::checkState() before doing anything.
Most important is that everything that is in state deleted can not be used
anymore (will detect logic errors in client code) and that if the item needs
to be refreshed from the backend, this can be postponed until the item is
actually accessed again.
Figure: workflow state transitions
For the special case of Item state after a failed transaction, see Item::rollbackTransaction()