Add regression tests for reproducing #10148.

 * ADD a MockedArgs class to unittests.py.
 * ADD a unittest which uses a valid base32-encoded uniform DH shared secret
   and valid obfsproxy args, and therefore should pass.
 * ADD a unittest which uses an invalid uniform DH shared secret and valid
   obfsproxy args, and should raise an
   obfsproxy.transports.base.PluggableTransportError.
Catch None and TypeError from b32decode(). Fixes #10148.

 * CHANGE method ScrambleSuitTransport.validate_external_mode_cli() to catch
   TypeErrors due to invalid padding in the (supposedly) base32-encoded
   uniform DH shared secret.

 * CHANGE method ScrambleSuitTransport.validate_external_mode_cli() to also
   raise an obfsproxy.transports.base.PluggableTransportError if the generic
   parent-class validate_external_mode_cli() method returns False, and add a
   message that some generic arguments weren't correct. I couldn't see an easy
   way to display a more-user friendly message; this should possibly be
   modified later, but it seemed like a bad idea to ignore when the parent
   class was tells us that the args aren't valid.

 * CHANGE method ScrambleSuitTransport.validate_external_mode_cli() to only
   try to check the length of the base32-decoded uniform DH shared secret if
   it's not None.

 * FIXES #10148.
Merge branch 'master' into fix/10148-uniformDHSharedSecret-b32decode
Use correct variable.