[Items][Contracts] Various Contracts + Item Broken Event

- More playing around trying to listen to the static analyzer... Uncovered a problem with item breaking events
- Switched out a statsDirty flag for just setting the stats to null or assigned... Then leveraging Contracts around that.
- Adding tests to cover item breakage
-- Looks like we could keep breaking a broken item.
-- The static analyzer was hinting at this, but I never really clued in.
-- Use an ItemBroken stat to mark items as broken.