First working build of what will be v2.

I'm worried this code is consuming too much memory. Liberally
adding __slots__ helped keep it below 12 GB, but I think it
may still get a bit high. This means that I will have to think
about how to restructure the main memory sinks (parameters, data
points, and maybe molecular structures for very large files).

And there are other problems. For one, I need to work on scaling
parameter steps for numerical differentiation of the objective
function. Anyway, there's a ton of differences here, so let's go
alphabetically.

calculate.py - Add a few new data types. Hopefully simplified this
    script. There's a lot of repetition in the data collection.
    Breaking it into functions may help. MacroModel error handling
    has been improved.
compare.py - Similar to the old evaluate.py. Hopefully the
    organization across modules makes more sense.
constants.py - What the name says. Nothing more than a holder for
    constants I use throughout the code.
datatypes.py - Contains classes for parameters, force fields, data
    points, and the Hessian. The idea is that this where my essential
    classes and functions will be.
filetypes.py - Contains classes and functions for getting data out
    of files. Also contains classes that pertain to molecular
    structure, which should probably be moved to datatypes.py.
gradient.py - Does the gradient optimization.
loop.py - Loops between gradient and simplex optimizations. This needs
    a good deal of work.
optimizer.py - Contains the base optimizer class that's used by
    the gradient and simplex class. Maybe this should be in
    datatypes too. Anyway, common functions for all the different
    optimizers go here.
parameters.py - Short script used to generate parameter files (which
    are significantly simpler now, perhaps too much so).
simplex.py - Does the simplex optimization. Need to fix repetition
    between central and forward differentiation.

All of these yaml files could be implemented into constants.py. That
would probably be better, as editing a python script is just as easy
as editing a yaml file.

logging.yaml - Dictionary setup for logging.
steps.yaml - Default step sizes for parameter types.
weights.yaml - Default weights for data types.
Simplex no longer repeats FF calculations for forward differentiation after already doing central differentiation.
Refined how data is passed between optimization methods.

Readded parameter steps based on percentage of parameter value.
Added missing weight import for dtype eigz.
Working on handling UnallowedNegative exceptions that are popping
up. If a parameter goes to a unallowed value during differentiation,
it should now discard the forward and backward steps for that
parameter, change the step size to 0.05 * current parameter value,
and then try the differentiation again (hopefully without a
UnallowedNegative exception this time).
Pulls out coordinates from Gaussian logs.

Not used in Q2MM really, but it's a convenience thing.
Needed import UnallowedNegative
Forgot to copy method if simplex failed.
Merge branch 'new-version' of https://github.com/ericchansen/q2mm into fix-unallowednegative
Working on giving more updates on parameter changes
Restores initial force field if no improvement
More logging for differentiation
Checking how gradient generates new parameter sets.

Out of 8 bond force constant parameters that I tested, my code
was giving the opposite of the 1st derivative obtained from
Elaine's code for 2 of the 8 parameters.

Upon inspection, it appears that somehow the original code would
occassionally incorrectly mistake a parmater increase with a
parameter decrease and vice versa.

The command...
    ParMod -i mm3.fld -z -dc paropt -o par.mult
... works just fine, and generates par.mult with the correct
parameter steps in the proper order. However, the command...
    ParMod -i mm3.fld -r mm3. -z -m par.mult
... can upset this order. For the 4th parameter (out of 8), the
decrement happened before the increment. In other words, mm3.7
had a parameter decrement, and mm3.8 had the increment, whereas
the opposite should be true. The same occured for the 6th
parameter (mm3.11 and mm3.12). I have no idea why this only
occurs for some parameters, and have not tested it beyond this
single case.
Removed steps.yaml - dictionary moved inside constants.py
Made gradient methods more robust.

The gradient methods can now easily support multiple maximum radii
of parameter changes, cutoffs, factors, etc. There is also an
argument, --default, that just uses the recommended (by me) settings.
Improved method name generation when max radius used
Changed location of log message that displayed before help information
Simple syntax adjustment
Modified logging syntax
Enabled loop to provide arguments to gradient