How can I determine the relationship and dependency between elements?

Revit maintains a huge number of different relationships between database elements. How to determine these depends on the elements in question.

An extremely important tool to explore the relationships between elements in the Revit database is
RevitLookup,
included with the Revit SDK.
Use of RevitLookup to explore the Revit database and relationships between elements is discussed and demonstrated in a large number of subsequent posts on The Building Coder blog.

An important technique to discover relationships that are not officially provided through the Revit API is demonstrated by the
object relationship analyser
(VB).
Use of this technique is also discussed and demonstrated in many places.

Most relationships are accessible through much simpler official means, though.

How can I extract a thumbnail image for a specific element?

How can I get a total count of properties, attributes and custom attributes for a given element?

You can easily achieve this, but there is no specific API call provided for this task.
You have to implement it yourself, and the number will vary depending on your requirements, criteria, and implementation.

How can I compare the properties of two elements?

[Q] For instance, if two different objects have a property of the same name, can their values be compared or summarized together?
E.g., a property of "Material" for a length of pipe might be copper; will a property of the same name on a copper elbow joint have the same "Material" value?

[A] I am pretty sure that a clever user can create a project in which this will not be the case.

When extracting data from Revit, what is the best approach to organize and retrieve that data?

That depends completely on your own needs.
You will need to perform a careful analysis.
Look at the database integration links listed above.

Is there a standard for all family element types (symbols) that remains the same from model to model?

No, unfortunately, the contrary is true.
Families and types are completely user defined, and creating their definitions is just as much an art as a science.

Is there an easy way to list of all families and element types from a model?

To retrieve the families that they belong to, you can use the FamilySymbol.Family property.

And: I can promise you some surprises if you start exploring this :-)

What methods are there to "walk" all objects?

The filtered element collector is the only way to access in and retrieve elements from the Revit database, unless you have a unique id or an element id and can access the individual object directly.

Please look at the
RevitLookup application,
which is provided in source code as part of the Revit SDK.

First of all, it is an invaluable tool both for developers and even end users to interactively explore the database and relationships such as the ones you are asking about.

Secondly, it iterates the entire database and walks all the objects, so you can use that code directly.

Conclusion

I hope you find this useful.

In general, almost every single question that you run into in your initial steps of implementing a Revit add-in has already been asked and answered somewhere.
Make good use of the help file, global search of the sample code, developer guide and then turn to an Internet query.

Believe me, it is easy and it is fun... both the development part and the research... it is all creative :-)