Item access overhaul. (paving the way for item processing performance improvements)

This big scary guy is overhauling the way we access items on the map.
The heart of it is that map::i_at() now returns a const item vector, which you can't just write to.
Instead you have to call map::add_item() or one of the helper methods to add items to the map, and i_rem() if you need to remove them.
This is important because in order to address the active item processing performance issues that have caused a bit of consternation recently, we need to build a cache of active items, and we can't have code bypassing the blessed interfaces for adding and removing items from the map.
Oh, nevermind, I see it -- it doesn't bypass `NOITEM`.