Add ConstTensorsAsInput support for Conv3d

 * Constant weights and biases are now stored as Constant layers.
 * Updated Serializer, Deserializer and unit tests to reflect this.
 * Updated TfLiteParser.
 * Updated Ref backend to handle constant weights and
   bias as inputs rather than reading from member variables.
 * Added Conv3d EndToEnd test.
 * Added NCDHW DataLayout and unit tests.

Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: I10cdd354ca5f1c748730f92ffdb36bf810f83c8e
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 99d7b96..b516d51 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -114,11 +114,9 @@
 
 
 IConnectableLayer* INetwork::AddConvolution3dLayer(const Convolution3dDescriptor& convolution3dDescriptor,
-                                                   const ConstTensor& weights,
-                                                   const Optional<ConstTensor>& biases,
                                                    const char* name)
 {
-    return pNetworkImpl->AddConvolution3dLayer(convolution3dDescriptor, weights, biases, name);
+    return pNetworkImpl->AddConvolution3dLayer(convolution3dDescriptor, name);
 }
 
 
@@ -1934,25 +1932,9 @@
 }
 
 IConnectableLayer* NetworkImpl::AddConvolution3dLayer(const Convolution3dDescriptor& convolution3dDescriptor,
-                                                      const ConstTensor& weights,
-                                                      const Optional<ConstTensor>& biases,
                                                       const char* name)
 {
-    if (convolution3dDescriptor.m_BiasEnabled && !biases.has_value())
-    {
-        throw InvalidArgumentException("AddConvolution2dLayer: biases cannot be empty");
-    }
-
-    const auto layer = m_Graph->AddLayer<Convolution3dLayer>(convolution3dDescriptor, name);
-
-    layer->m_Weight = std::make_shared<ScopedTensorHandle>(weights);
-
-    if (convolution3dDescriptor.m_BiasEnabled)
-    {
-        layer->m_Bias = std::make_shared<ScopedTensorHandle>(biases.value());
-    }
-
-    return layer;
+    return m_Graph->AddLayer<Convolution3dLayer>(convolution3dDescriptor, name);
 }
 
 IConnectableLayer* NetworkImpl::AddDepthToSpaceLayer(const DepthToSpaceDescriptor& depthToSpaceDescriptor,