Text this: A review of a posteriori error estimation and adaptive mesh-refinement techniques