scripts/perftune.py: rework NetPerfTuner
scripts/perftune.py: rework NetPerfTuner

Major rework of the NetPerfTuner. The original code was a rewrite from the shell script.
This patch makes it look more like a Python program and prepares the code for
creation another Tuner:
   - Take the generic parts out of NetPerfTuner:
      - Some generic methods are made a stand alone functions.
      - Introduce a PerfTunerBase class:
         - Stores the '__mode', '__args' and the corresponding IRQs and compute masks.
         - Implements the generic methods, e.g 'mode' setter and getter, irqs getter, etc.
         - Exposes a few generic getters (@properties).
         - Defines a few abstract methods (that would be required to be implemented by a child), e.g. tune()
      - Use enum for configuration modes:
         - Define the enum values so that they are ordered from the one that cuts the biggest number
           of CPUs from the compute CPUs' set (sq_split - cuts all HT siblings of CPU0) to the one that cuts the smallest number
           (mq - doesn't cut any CPU at all). This way we may calculate the 'common quotient' mode by simply choosing the minimal
           mode.
         - Use type-cast tricks for replacing the mode values checking.

Signed-off-by: Vlad Zolotarov <976c0f8d0852ed6439ad273880b400a75a7c41d0@scylladb.com>

syuu1228/seastar,dreamsxin/seastar,avikivity/seastar,cloudius-systems/seastar,cloudius-systems/seastar,scylladb/seastar,scylladb/seastar,syuu1228/seastar,avikivity/seastar,avikivity/seastar,scylladb/seastar,cloudius-systems/seastar,dreamsxin/seastar,syuu1228/seastar,dreamsxin/seastar