<p>Very simply, what is tail-call optimization?</p>

<p>More specifically, what are some small code snippets where it could be applied, and where not, with an explanation of why?</p>

Look here:
http://tratt.net/laurie/tech_articles/articles/tail_call_optimization
As you probably know, recursive function calls can wreak havoc on a stack; it is easy to quickly run out of stack space. Tail call optimization is way by which you can create a recursive style algorithm that uses constant stack space, therefore it does not grow and grow and you get stack errors.