arch: Use shared_ptr for all Faults

This patch takes quite a large step in transitioning from the ad-hoc
RefCountingPtr to the c++11 shared_ptr by adopting its use for all
Faults. There are no changes in behaviour, and the code modifications
are mostly just replacing "new" with "make_shared".
diff --git a/src/base/types.hh b/src/base/types.hh
index 9ef362f..c4cb4d9 100644
--- a/src/base/types.hh
+++ b/src/base/types.hh
@@ -40,6 +40,7 @@
 #include <inttypes.h>
 
 #include <cassert>
+#include <memory>
 #include <ostream>
 
 #include "base/refcnt.hh"
@@ -179,6 +180,12 @@
 const PortID InvalidPortID = (PortID)-1;
 
 class FaultBase;
-typedef RefCountingPtr<FaultBase> Fault;
+typedef std::shared_ptr<FaultBase> Fault;
+
+#ifndef SWIG // Swig gets really confused by decltype
+// Rather than creating a shared_ptr instance and assigning it nullptr,
+// we just create an alias.
+constexpr decltype(nullptr) NoFault = nullptr;
+#endif
 
 #endif // __BASE_TYPES_HH__