MAGIC variance reduction

I added the MAGIC variance reduction technique to variancereduction.py. @makeclean, you should review the method. Tests were also added.

Theory manual addition still needed.

issue #344
You should be able to get around that with ```np.atleast_1d()```

Something like: 
```python
for ve, flux in enumerate(meshtally.vals[:]):
    flux = np.atleast_1d(flux)
     ...
```