The Python-level declareProperty methods are now static

They also accept a boost::python::object as the first argument so that
they can match against multiple types of base class.
Refs #5157