Overhaul the way profiling statistics are gathered in Ovale.

Move profiling code from OvaleDebug to OvaleProfiler module.

Registering a module for profiling adds two new methods to the addon:
StartProfiling() and StopProfiling().  These two methods can be used at
the start and end of each function body to gather profiling statistics for
that function call.

Enabling and disabling profiling for a module via the Profiling options
panel replaces the StartProfilng and StopProfiling methods for that module
with functioning or do-nothing functions.
Adjust some profiling usage to help analyze OvaleBestAction.
Implement tostringall() in WoWAPI for the driver programs to function.
Change HasWeapon()'s "type" parameter to one_handed/two_handed values.

The previous values of 1h/2h were invalid since strings and identifiers
cannot start with a number.

This fixes the SMF rotation on fury warriors.  Before this change, the
Titan's Grip rotation was always shown regardless of the weapons equipped.
Warrior: Remove short CD spells from the main attack for Titan's Grip.
Improve logging message if run-time requirements fail for auras.
Allow "!value" to actually work when used in run-time requirements.

A flag was not being toggled properly if "!" was detected.  This was
causing the state machine to not properly account for buffs being consumed
by certain in-flight spells on shadow priests and demonology warlocks.
Warlock: Fix typo in SpellInfo for Soul Fire.
Warlock: Demonbolt's cost is affected by the stacking Demonbolt buff.

The Demonbolt buff increases the cost of Demonbolt by 100% of the base
cost per stack, i.e., cost = 80 + 80 * BuffStacks(demonbolt_buff).
Warlock: Suggest Life Tap much earlier since we don't have infinite mana.

Mana is treated specially by Ovale as an infinite resource so that it's
not necessary to add mana costs to every spell.  That works in most cases
but fails in the case of warlocks that are supposed to use Life Tap in
their rotation to actively regenerate mana.  Move Life Tap much higher in
the rotation so that it gets used properly.