Improve PYBIND11_DEPRECATED by showing the message on all compilers

GCC supports `deprecated(msg)` since v4.5 and VS supports the standard
[[deprecated(msg)]] since 2015 RTM.

The deprecated constructor change from `= default` to `{}` is
a workaround for a VS2015 bug.
diff --git a/include/pybind11/attr.h b/include/pybind11/attr.h
index bcd69a8..25c7cb3 100644
--- a/include/pybind11/attr.h
+++ b/include/pybind11/attr.h
@@ -58,7 +58,7 @@
     handle value;
 
     PYBIND11_DEPRECATED("py::metaclass() is no longer required. It's turned on by default now.")
-    metaclass() = default;
+    metaclass() {}
 
     /// Override pybind11's default metaclass
     explicit metaclass(handle value) : value(value) { }
diff --git a/include/pybind11/common.h b/include/pybind11/common.h
index 6df39f8..58fc205 100644
--- a/include/pybind11/common.h
+++ b/include/pybind11/common.h
@@ -69,14 +69,10 @@
 #  define PYBIND11_NOINLINE __attribute__ ((noinline))
 #endif
 
-#if defined(PYBIND11_CPP14)
+#if defined(PYBIND11_CPP14) || defined(_MSC_VER)
 #  define PYBIND11_DEPRECATED(reason) [[deprecated(reason)]]
-#elif defined(__clang__)
+#else
 #  define PYBIND11_DEPRECATED(reason) __attribute__((deprecated(reason)))
-#elif defined(__GNUG__)
-#  define PYBIND11_DEPRECATED(reason) __attribute__((deprecated))
-#elif defined(_MSC_VER)
-#  define PYBIND11_DEPRECATED(reason) __declspec(deprecated)
 #endif
 
 #define PYBIND11_VERSION_MAJOR 2