Ultimately I think the answer to your question is going to depend upon the needs of your particular application, as there isn't a one-size-fits all solution. Although there are a number of decent resources on the web, you'll save yourself a lot of time and frustration by picking up Christer Ericson's Real-time Collision Detection, which lays out in great detail a wide variety of techniques and algorithms, with example C++ code.
It helped me to take baby steps before jumping into trying to build a grand system. Writing a function to determine if a point is in a plane, then if a point is in a triangle, if a ray is in a triangle, etc. Then moving onto static tests of various convex solids: AABB vs. Triangle, etc. With time things that seemed impenetrable (forgive the pun) at first became less daunting. Here is a listing of a good number of tests, with example code:
http://www.realtimerendering.com/intersections.html
In the meantime, since I know not everyone can just fork out 70-80$ for a book at will, here are some terms you might want to look into:
- Spatial Partitioning, Octrees, Quadtrees, BSP trees
- BIH Trees
- Bounding Volumes and Bounding Volume Hierarchies
- Discrete vs. Continuous Collision Detection
- Separating Axis Theorem
- GJK Algorithm