optimizer param struct improvements

********* PEOPLE *************
Primary reviewer: @sc932 

Reviewers:

********* DESCRIPTION **************
Branch Name: eliu_gh_138_expose_cpp_struct_data_members_to_python
Ticket(s)/Issue(s): Closes #138 Closes #391 

meat of change in:
moe/optimal_learning/cpp/gpp_optimizer_parameters.hpp
moe/optimal_learning/cpp/gpp_python_common.cpp
moe/optimal_learning/python/comparison.py
moe/optimal_learning/python/cpp_wrappers/optimization.py
moe/tests/optimal_learning/python/comparison_test.py
moe/tests/optimal_learning/python/cpp_wrappers/optimization_test.py

C++ optimizer param structs now direclty readable/writeable from Python
C++ GradientDescentParameters now tracks num_steps_averaged (but doesnt use it)

********* TESTING DONE *************
make test
manual checking
cls, see ``@classmethod`` decorator. this is so that these objects are created once per test class, equivalent of ``class_setup`` in testify