Add acyclic check pass to hidl-gen

Adds recursive tree pass that checks that directed graph of
definitions and references is acyclic.
It prints nice error message, which shows the whole found cycle.

To be really tested, it requires lookups to be moved outside of parsing.

Test: hidl_test
Bug: 31827278

Change-Id: I9e96fa8206cfb84a56298991c526f71befae1478
diff --git a/VectorType.h b/VectorType.h
index e868355..a6acd0a 100644
--- a/VectorType.h
+++ b/VectorType.h
@@ -18,6 +18,9 @@
 
 #define VECTOR_TYPE_H_
 
+#include <vector>
+
+#include "Reference.h"
 #include "Type.h"
 
 namespace android {
@@ -30,6 +33,8 @@
     std::string typeName() const override;
     bool isCompatibleElementType(Type *elementType) const override;
 
+    std::vector<Reference<Type>> getStrongReferences() const override;
+
     bool canCheckEquality() const override;
 
     std::string getCppType(