Jialei gh368 cuda python interface

********* PEOPLE *************
Primary reviewer: @suntzu86 

Reviewers: @sc932 

********* DESCRIPTION **************
Branch Name: jialei_gh368_cuda_python_interface
Ticket(s)/Issue(s): #368 

********* TESTING DONE *************
make test
You should define a function named inline OL_NONNULL_POINTERS void SetupExpectedImprovementState( with overloaded input type const CudaExpectedImprovementEvaluator& ei_evaluator. See gpp_math.hpp for examples.

In this function, create the appropriate statetype object instead of doing it inline. Before creation, check max_num_threads and fail if it's naughty. This will be the layout you want in the future to allow multi-GPU support and it slightly reduces code repeat right now. Lastly it moves the check only to the place where it matters (creating the right number of state objects). Right now, this is over-restrictive b/c now the q==p==1 case also cannot be run multithreaded.

Lastly, change this to a ```InvalidValueException<int>``` where value = max_num_threads and truth = 1 to make it more informative (keep the same message).