Updated python test scripts by removing useless cast to LowDiscrepancySequence
and Drawable classes
Remove casts in python/tests/ scripts
Add a new macro OTTypedInterfaceObjectImplementationHelper(interface,implementation)

Some classes do not follow the usual pattern by appending
"Implementation" to interface classes, like
DistributionImplementationFactory.

Rewrite OTTypedInterfaceObjectHelper to use this macro.
Use OTTypedInterfaceObjectImplementationHelper macro

Automatic conversion:
 * OrthogonalUniVariatePolynomialFactory --> OrthogonalUniVariatePolynomialFamily
 * DistributionImplementationFactory --> DistributionFactory
 * OrthogonalFunctionFactory --> OrthogonalBasis
Automatic conversion from DistributionImplementation into Copula
Automatic conversion from DistributionImplementation into SklarCopula
New macros to define Collection<foo> types

The macro
  OTTypedCollectionInterfaceObjectHelper(Interface)
is expanded into

  %template(Interface ## Collection)   OT::Collection<OT::Interface>;
  %typemap(in) const Interface ## Collection & {
    if (SWIG_IsOK(SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0))) {
      // From interface class, ok
    } else {
      $1 = OT::buildCollectionFromPySequence< OT::Interface >( $input );
    }
  }
  %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const Interface ## Collection & {
    $1 = SWIG_IsOK(SWIG_ConvertPtr($input, NULL, $1_descriptor, 0))
      || OT::canConvertCollectionObjectFromPySequence< OT::Interface >( $input );
  }
  %apply const Interface ## Collection & { const OT::Collection<OT::Interface> & };

The macro
  OTTypedCollectionInterfaceObjectMisnamedHelper(Interface,CollectionType)
is used when Collection type does not follow this naming pattern.

When defining collections with any of these macros, struct traitsPythonType
must be defined like this:
  template <> struct traitsPythonType<OT::Interface>
  {
    typedef _PyObject_ Type;
  };
and the following two functions must be defined:

  template <> inline bool canConvert< _PyObject_, OT::Interface>(PyObject * pyObj)
  template <> inline OT::Interface convert< _PyObject_, OT::Interface>(PyObject * pyObj)
Automatic conversion from a Python sequence into Collection<foo>

When defining collections with OTTypedCollectionInterfaceObjectHelper,
struct traitsPythonType must be defined like this:
  template <> struct traitsPythonType<OT::Interface>
  {
    typedef _PyObject_ Type;
  };
and the following two functions must be defined:

  template <> inline bool canConvert< _PyObject_, OT::Interface>(PyObject * pyObj)
  template <> inline OT::Interface convert< _PyObject_, OT::Interface>(PyObject * pyObj)

As Collection<foo> may be used in a different module from where it is defined,
these functions must be written into a separate file.  It had been decided to
write them into <module>Collection.i, where <module> is named after <module>TemplateDefs.i.

Then
  %include <module>Collection.i
is written into foo.i, and the same line can be inserted in xxx_module.i if this module
needs these functions in order to be compiled.