Try this again

Some of the previous functionality was removed as I haven't gotten back
to adding it again, but I figured I hadn't made a commit in too long.

- Version to 0.0.2
- Added dependency on Socket.IO Angular module for better reliability.
- Added dependency on ocLazyLoader. The lazy loader will load the
Javascript file associated with the current theme for the site or for
the user (if the user is signed in).
- Setup deferIntercept management for UI-Router. This allows location
changes without state changes. Useful during infinite scrolling.
- Fixed a bug with the ending slash rule.
- Since themes now supply the actual views, we need some way of
determining their URL. This is done via a theme.js static server handler
that the theme has to setup. In this way, anything that is requested
from the URL prefix: '/themes/THEME_NAME/' will actually redirect to the
static server setup by the theme. The theme can also setup any other
middleware it wants, for example, the default theme sets up a SASS
middleware to compile the SCSS into CSS.
- Added a locationChangeSuccess handler to setup the deferIntercept. If
you want to make a location change without a state change, simple set
the deferIntercept property in the modIServiceSettings.applicationState
object (more on the settings changes later).
- Setup a rather complex state change system with good reason. Don't
feel the need to expain everything here again (it is in the comments),
but it is important to note that redundancy is minimized. For example,
on an initial load, the server will give the client the data associated
with a view, and the state change handler will prevent UI Router from
trying to retrieve the data again.
- The theme is loaded via ocLazyLoader with Require.JS.
- Added a dependency for services (the FactorySettings was changed to
ServiceSettings).
- Pretty much just changed the stateResolve to coincide with the new
statechange handler. But changes were made to detect 404s and 500s.
- The IsObject function was a bit faulty, made a change to make sure it
was explicit.
- As mentioned before, not all the functionality has been restored, so a
few controllers are currently not injected.
- Every core controller will now call LoadStateControllers on the newly
created ServiceModule. The goal of this is to initiate any controllers a
plugin or theme may have for a specific view. Currently, however, only
themes have this capability. Also core controllers don't independently
set all the view data. They simply set the state property of the scope
which includes all of this data.
- The forum pages now support both infinite scrolling and pagination.
The default setting for the forum is infinite scrolling, but the system
is set in place for the user to use pagination. But the system to allow
the user to change settings is currently not existing (requires a user
profile route). With this new infinite scrolling, a service has been
created to create infinite scrolling systems for future use (will be
done for the topic route). The forum view will also update the page in
the URL bar using the deferIntercept system.
- Plugins now have a fairly complete base. A list of hooks is listed in
the configsettings.js file, but there currently aren't many.
- Changed the bcrypt to a natively compiled version for much much faster
results. Unfortunately this does require some more dependencies, but I
think it is worth it.
- Many more settings added to configsettings
- The server interface is now done through a simple API system. There
are Controller handlers and there are API handlers. The controller
handlers simply exist for retrieving the route data, but are never
invoked directly by the client. They are only invoked on an initial load
from the primary route handler, and from an API call from hence.