Reworking the boundary element and node iterators in MooseMesh.

This makes it so the following line of code compiles:
MooseMesh::bnd_node_iterator boundary_nodes_it  = _mesh.bndNodesBegin();

Note that there is an interesting issue with the ConstBnd{Node,Elem}Range typedefs.
Since they depend on the MooseMesh::const_bnd_{node,elem}_iterator types, they have
to be defined after them, but they should not be defined inside MooseMesh if we want
to continue to mimic the Const{Node,Elem}Range classes from libmesh and avoid changing
any interfaces.  Therefore, these typedefs are now immediately after the MooseMesh
class declaration.

Refs #3969.