docs: def extend(self, base, key, value=None):
          """
          Adds a new definition to this enumerated type, extending the given
          base type.  This will create a new key for the type and register
          it as a new viable option from the system, however, it will also
          register its base information so you can use enum.base to retrieve
          the root type.
          
          :param      base  | <variant> | value for this enumeration
                      key   | <str>     | new key for the value
                      value | <variant> | if None is supplied, it will be auto-assigned
          
          :usage      |>>> from projex.enum import enum
                      |>>> Types = enum('Integer', 'Boolean')
                      |>>> Types.Integer
                      |1
                      |>>> Types.Boolean
                      |2
                      |>>> Types.extend(Types.Integer, 'BigInteger')
                      |>>> Types.BigInteger
                      |4
                      |>>> Types.base(Types.BigInteger)
                      |1
          """
          new_val = self.add(key, value)
          self._bases[new_val] = base