It's still a work in progress (I would like to add some worked examples), so any suggestions for improvements are welcome.