Massive rewrite done for a better api structure

Skeleton was born out of the need to define an API programatically with no external dependencies. The spec is modeled after the Swagger 2.0 spec and has a serializer specifically for swagger.

We are not bound to swagger by any means. If we choose to have a different serializer for another type of documentation format, we can do it with relatively ease.

/cc @supernullset
As above, I think this and the following dump methods deserve to be their own objects. Much of this conditional assignment in here could be handed off.