Merge PR99 and its fixes to support parsing Information Object and Information Object Set

This is a collection of works :

1. Based on @zhanglei002's pull request 99.

2. A fix by @AuthenticEshkinKot and merged by @mouse07410 at
   commit 2c8d366bbe1fc4e4c041e9b0eb9779f8a42d754b of https://github.com/mouse07410/asn1c
   to support parsing of Information Object and Information Object Set

3. A fix by @Uri Blumenthal in asn1fix_derefv.c at :
   commit ec0ade4f87c807e763e3f35fc5466adb6dda3473 of https://github.com/mouse07410/asn1c
   to solve crash on asn1p_value_free().

4. My pull request 18 to @mouse07410's https://github.com/mouse07410/asn1c to solve
   problems found during parsing ASN.1 modules of S1AP, RANAP and J2735-201603.

5. My pull request 22 to @mouse07410's https://github.com/mouse07410/asn1c to solve issue 147
   and to solve the problem during parsing ASN.1 module of NBAP.

6. My pull request 23 to @mouse07410's https://github.com/mouse07410/asn1c to fix memory leakage
   introduced in aforementioned commits.
   Most code changes are the same as pull request 153 to this repository.

7. A fix of my bug in item 6 which result asn1c crash, fixed by @mouse07410.
diff --git a/libasn1fix/asn1fix_value.c b/libasn1fix/asn1fix_value.c
index 0e60ef7..b881afc 100644
--- a/libasn1fix/asn1fix_value.c
+++ b/libasn1fix/asn1fix_value.c
@@ -199,8 +199,28 @@
 			: "<not found>"
 		);
 
-	if(child_expr && child_expr->value) {
-		if(_asn1f_copy_value(arg, value_expr, child_expr))
+	if(child_expr) {
+		/* Maybe hasn't been fixed yet. */
+		if (!child_expr->value) {
+			asn1p_expr_t *saved_expr = arg->expr;
+			arg->expr = type_expr;
+			switch (type_expr->expr_type) {
+			case ASN_BASIC_INTEGER:
+				asn1f_fix_integer(arg);
+				break;
+			case ASN_BASIC_ENUMERATED:
+				asn1f_fix_enum(arg);
+				break;
+			default:
+				WARNING("Unexpected type %s for %s",
+						type_expr->expr_type,
+						type_expr->Identifier);
+				return -1;
+			}
+			arg->expr = saved_expr;
+		}
+		if(child_expr->value && _asn1f_copy_value(arg,
+				value_expr, child_expr))
 			return -1;
 		/* Fall through */
 	}