AI server: more code cleanup
AI server: room statuses are no longer magic numbers for clarity.
foreach_stlmap() now handles locking the map implicitly; implmented foreach_stlmap_nolock() to behave otherwise. Removed all code that handled manually locking the STL container's lock.
AI server: removed CNpc::m_byGroup in favour of Unit::m_bNation. Implemented temporary CUser::GetNation() getter and cleaned up all uses.
AI server: Implements CUser::GetLevel() & CNpc uses Unit::m_bLevel instead of CNpc::m_proto::m_sLevel.
AI server: player names now use std::string (like every other name). No longer care about inconsistent player health data (assume it's fine, if it's not it's something we need to fix... not workaround.)
AI server: removed the USER_BAND stuff (confusing for the most part and VERY easy to break), replaced it with a flag to indicate whether the target's set.
AI server: CUser now inherits base Unit functionality.
AI server: CUser class is more exposed to inherited functionality. Removed m_MagicProcess & ensured the correct map class is used per-server (...).
AI server: ensure CUser & CNpc classes initialise the base Unit class properly.
AI server: remove CUser::m_lUsed & CUser::m_bLogOut.
AI server: removed CUser::m_curZone & CUser::m_pMap.
AI server: replaced explicit position use with the generic position getters
SQL: Fixes SQL error when updating the USERDATA.Exp column (if a constraint is set). Closes #101.
AI server: started replacing range checks with inherited Unit class logic (also extended it a little for some later porting).
AI server: cleaned up CNpc::IsInRange() & renamed it to the slightly more accurate CNpc::isInSpawnRange().
AI server: replaced a manual range check (doesn't even use their standard logic...)
AI server: replaced a couple of direct m_bNation uses
AI server: cleaned up another point range check
AI server: removed some unused code