Cómo estirar un número fijo de elementos de navegación horizontal de manera uniforme y completa en un contenedor específico

Me gustaría estirar 6 elementos de navegación de manera uniforme en un contenedor de 900 px, con una cantidad uniforme de espacio en blanco entre ellos. Por ejemplo..

---| 900px Container |---

---| HOME    ABOUT    BASIC SERVICES    SPECIALTY SERVICES    OUR STAFF    CONTACT US |---

Actualmente, el mejor método que puedo encontrar para hacer esto es el siguiente:

nav ul {
  width: 900px; 
  margin: 0 auto;
}

nav li {
  line-height: 87px;
  float: left;
  text-align: center;
  width: 150px;
}

El PROBLEMA con esto es doble. En primer lugar, no lo justifica realmente, sino que distribuye las etiquetas li uniformemente por toda la etiqueta ul ... creando espacios en blanco desiguales entre elementos de menú más pequeños como "INICIO" o "ACERCA DE" y los más grandes como "SERVICIOS BÁSICOS" .

El segundo problema es que el diseño se rompe si un elemento de navegación es mayor que 150 px, que es SERVICIOS ESPECIALIZADOS, a pesar de que hay espacio más que suficiente para toda la navegación.

¿Alguien puede resolver esto por mí? He estado buscando soluciones en la web, y todas parecen quedarse cortas. CSS / HTML solo si es posible ...

¡Gracias

UPDATE (29/07/13): Usar table-cell es la mejor forma moderna de implementar este diseño. Ver la respuesta de Felix a continuación. Lostable cell propiedadworks en el 94% de los navegadores actualmente. Tendrá que hacer algo con respecto a IE7 y a continuación, pero de lo contrario debería estar bien.

UPDATE (30/7/13): Desafortunadamente, hay un error de webkit que afecta esto si está combinando este diseño con Consultas de medios. Por ahora, deberá evitar cambiar la propiedad 'mostrar'. @Ver el error de Webkit.

UPDATE (25/7/14): Hay una mejor solución para esto a continuación que ahora involucra alinear texto: justificar. Usar esto es más simple y evitará el error de Webkit.