Multiprocessing, averaging

do period search with multiprocessing, replace weighted variance calculation for loops with numpy.average, value exceptions for numc.
I'm not quite familiar with the semantics, but it might be better to structure the code as:

```python
pool = Pool(nprocesses)
try:
     # do stuff here
finally:
    pool.terminate ()
    pool.join ()
```

to ensure that the Pool absolutely always gets cleaned up, even if an exception occurs. Pools might also support something along the lines of

```python
with Pool (nprocesses) as pool:
    # do stuff
```

which is a slightly nicer way of reaching the same level of robustitude.