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.
Merge pull request #3970 from jwpeterson/bnd_range

Reworking the boundary element and node iterators in MooseMesh.
Merge commit '8f5dd57c5d7b14b835be013d5fcc0f0278dd6ddb'