Add more alignment possibilities

This PR includes a general cleanup and a new approach to aligning the pointer element. This is a list of the changes:

* Expose the `CLASSES` object as a static property
* Rename the `placement` attribute to `pointerAlign` because it's not entirely compatible with the previous one. My understanding is that a class that uses this extension can add a `placement` attribute and change `pointerAlign` based on `placement`
* Add API Docs
* Expose the pointer template as a prototype property
* Use a protected property to store the node that the pointer "sticks" to. This should allow class authors to override it to align the pointer to an element of the widget that is not the bounding box
* `syncUI` syncs the position
* Changing `pointerAlign` repositions the pointer
* `alignPointer` takes two parameters: a node and a placement. The node can be different than the `_pointerBox` to allow for cases like this:

![untitled-1](https://f.cloud.github.com/assets/347002/704607/85f15138-ddc4-11e2-9c77-a5be2dd0f564.png)

Please do not merge it as it is. There are things to discuss like the use of `placement` vs `pointerAlign` and if WidgetPointer should know anything about data attributes (I'm starting to think it shouldn't).

Needs unit and functional tests.