* Clean up the CombatAction and Attack code to make it easier to use for
range.
* Add collision detection to the distance checks before attacking in the
CombatAction.
* Create a Ruby DSL for defining projectile types and fix the
ProjectileUpdateOperation so it uses the correct position offset.
* Fix the packet structure of the HintIconMessageEncoder.
* Moves the decision of what attack is used next to CombatState and
defers selecting the attack until the player is actually ready to hit
their target for damage.
* Adds a distance check so combat is only initiated within the correct
range. If the player isn't close enough to their target, they will run
towards it and check every tick if they're close enough to make an
attack.
* Uses a hierarchy of WeaponClasses -> Weapons for performing attacks,
with WeaponClass having a set of styles and associated Attacks for
those styles. Weapons and their classes are built with an easy to use
and clean DSL.
* Adds a BonusContainer mixin, so that Equipment, Weapons, and
WeaponClasses can all have their own set of bonuses which apply to the
player.
* Allows attacks to be queued to the Mobs CombatState instance from
external code, allowing e.g., NPCs or auto-cast to queue attacks to be
executed.