weak_ptr instead of shared_ptr

All interface objects now take weak_ptr instead of shared_ptr. All
services are now globally unique (unfortunate side effect...not sure yet
if I should make them non-global again or if this is okay...I think it
should be okay as long as services are kept to only managing resources)