Vertex Array Object Rendering Questions

1. What happens when you rebind the currently bound VAO with glBindVertexArray()? Is there a performance cost to rebinding the current VAO?
(I have heard that there is a large performance cost to bind a different VAO [http://www.opengl.org/wiki/Vertex_Rendering] but what about rebinding the same VAO).

In short, does the documentation mean that Open GL adds 'basevertex' to the 'start' and 'end' indices or do I need to add 'basevertex' to 'start' and 'end' manually before calling glDraw*Range() to help the driver optimize glDraw*Range() calls?

For example:
Imagine that the indices from different meshes are combined, many of the indices will have the same value, but different meanings, which is solved by keeping a baseIndex with each mesh and using it to call gl*Draw*BaseVertex.
Each mesh's index offset is saved so that multiple unrelated meshes can be rendered with one VAO.