Topology convenience methods

- adds `atoms_by_name`. (e.g. `trajectory.top.atoms_by_name('CA')`)
- I didn't add `residues_by_name`,  but that would be a reasonable thing to add to `Topology` and `Chain`
- I also changed the `Residue.atom(self, index)` method to allow the argument to be a string (argument renamed `index_or_name`, in which case the first atom with the matching name is returned. This seems reasonable on Residue, since by convention the atom names are unique within a residue, but it didn't seem like a really useful extension to add to `Topology.atom(self, index)` or `Chain.atom(self, index)`, since the atom names are not unique within those groupings.