Use PyOP2 object caching for function spaces

Rather than reimplementing the same scheme, just let FunctionSpaceBase
inherit from ObjectCached.