Use std::make_shared in schedule.cpp

std::make_shared<T>(ctor_args...) yields a std::shared_ptr<T>
constructed as though you called new T(ctor_args...) but does a single
alloc. for both the T and the shared_ptr data. It also avoids the
possibility of resource leaks due to errors in evaluating function
parameters, e.g.

```c++
some_func(std::make_shared<T>(args...)); // is safer than
some_func(std::shared_ptr<T>(new T(args...)));
```