use shared_ptr for internal storage instead of references
Many places in PDELab store a refernce internally. At the same time we often handle references internally as shared_ptr. In general we should always use shared_ptr and transform from reference to shared_ptr directly in that constructor that the user called.