[instance] define ot::Instance class (#2307)

This commit makes the following changes: It defines the public
`otInstance` as an empty opaque structure which is used by all public
C OpenThread APIs. It defines a new class `ot::Instance` (inheriting
from `otInstance) which is then used in core source files. The
functionality related to the instance is also moved/added into the
newly added `Instance` class (as class/static or member methods).
diff --git a/src/core/net/icmp6.cpp b/src/core/net/icmp6.cpp
index 98909d1..3761647 100644
--- a/src/core/net/icmp6.cpp
+++ b/src/core/net/icmp6.cpp
@@ -39,6 +39,7 @@
 
 #include "common/code_utils.hpp"
 #include "common/debug.hpp"
+#include "common/instance.hpp"
 #include "common/logging.hpp"
 #include "common/message.hpp"
 #include "net/ip6.hpp"
@@ -48,7 +49,7 @@
 namespace ot {
 namespace Ip6 {
 
-Icmp::Icmp(otInstance &aInstance):
+Icmp::Icmp(Instance &aInstance):
     InstanceLocator(aInstance),
     mHandlers(NULL),
     mEchoSequence(1),