support self-defined node width

support to customize node width by add width property in node model. 

If width not specified, using default value 

Test cases are added to test this feature, works fine on my chrome

PS: there are some changes caused by "tab or spaces". I found that most of the code is using tab, so I replaced spaces with tab. Hope is is not an issue. Personally I use spaces (-: