Tidy up API and tests.

The API exposes constructors with lower cased names. This is contrary to our normal convention and likely confusing. Lower case names often implies a factory API, however, these implementations are not structured correctly to be invoked as factories. Similarly, testing the invocation of a method on the prototype does not guarantee that a new instance was created or that even the correct API was invoked (due to the hierarchy and sharing).