util: switched to safer memory handling for {Scheduled,Periodic}Actions

The actions themselves are now allocated separately and stored in
`shared_ptr`s in the owning objects' container variables.  For user
code, `weak_ptr`s are used to store references to the actions.

IMPORTANT: a reference to e.g. a PeriodicAction should be instantiated as

   std::shared_ptr<crisp::util::PeriodicAction> my_shared_ptr
        ( the_action.get_pointer() );

NOT like this:

   std::shared_ptr<crisp::util::PeriodicAction> my_shared_ptr
        ( & the_action );

The latter way will create a new reference-counter for the object, which
will result in two independent SETS of owners sharing the object.  This
is Bad(TM), because it means that the object's memory will be freed
twice and computers don't like that very much.

If you're unfamiliar with `std::weak_ptr`, I recommend reading
[its documentation](http://en.cppreference.com/w/cpp/memory/weak_ptr).