Broken Factor Product
factor product throws a TypeError that input parameters must be factors.

``` python3
print(phi1)
A               B               phi(A, B)
--------------------------------
A_0             B_0             1.0
A_0             B_1             100.0
A_1             B_0             90.0
A_1             B_1             10.0


print(phi2)
B               C               phi(B, C)
--------------------------------
B_0             C_0             10.0
B_0             C_1             80.0
B_1             C_0             70.0
B_1             C_1             30.0


phi1 * phi2
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-e0a56e1ddb88> in <module>()
----> 1 phi1 * phi2

/home/ankur/pgmpy/pgmpy/factors/Factor.py in __mul__(self, other)
    370 
    371     def __mul__(self, other):
--> 372         return self.product(other)
    373 
    374     def __eq__(self, other):

/home/ankur/pgmpy/pgmpy/factors/Factor.py in product(self, *factors)
    300                 ('x3', ['x3_0', 'x3_1']), ('x4', ['x4_0', 'x4_1'])])
    301         """
--> 302         return factor_product(self, *factors)
    303 
    304     def divide(self, factor):

/home/ankur/pgmpy/pgmpy/factors/Factor.py in factor_product(*args)
    479     """
    480     if not all(isinstance(phi, Factor) for phi in args):
--> 481         raise TypeError("Input parameters must be factors")
    482     return functools.reduce(lambda phi1, phi2: _bivar_factor_operation(phi1, phi2, operation='M'), args)
    483 

TypeError: Input parameters must be factors
```

diff --git a/pgmpy/factors/Factor.py b/pgmpy/factors/Factor.py
index dcb07e93..1bcab70a 100644
--- a/pgmpy/factors/Factor.py
+++ b/pgmpy/factors/Factor.py
@@ -503,8 +503,8 @@ def factor_product(*args):
     --------
     factor_divide
     """
-    # if not all(isinstance(phi, Factor) for phi in args):
-    #     raise TypeError("Input parameters must be factors")
+    if not all(isinstance(phi, Factor) for phi in args):
+        raise TypeError("Input parameters must be factors")
     return functools.reduce(lambda phi1, phi2: _bivar_factor_operation(phi1, phi2, operation='M'), args)
 
 
diff --git a/pgmpy/tests/test_factors/test_Factor.py b/pgmpy/tests/test_factors/test_Factor.py
index af33202c..9bfa06c0 100644
--- a/pgmpy/tests/test_factors/test_Factor.py
+++ b/pgmpy/tests/test_factors/test_Factor.py
@@ -152,7 +152,6 @@ class TestFactorMethods(unittest.TestCase):
              ('x2', ['x2_0', 'x2_1']),
              ('x3', ['x3_0', 'x3_1'])]))
 
-    @unittest.skip('fix this issue #233')
     def test_factor_product_non_factor_arg(self):
         from pgmpy import factors
         self.assertRaises(TypeError, factors.factor_product, 1, 2)
['pgmpy/tests/test_factors/test_Factor.py', 'pgmpy/factors/Factor.py']